Bilgisayar Bilimi'ni tamamen kendi kendine nasıl çalışabilirim? [kapalı]


46

Tamamen kendi kendine öğretilen bir programcı olarak, tipik bir CS derecesine göre öğretilen bilgisayar bilimi dersini kendi kendine öğrenerek kendimi daha iyi öğrenebilsem çok isterdim.

İnternette farklı kaynaklar bulmak kolay oldu, elbette MIT açık kurs gereçleri var, Stanford ve diğer üniversitelerden de Kursra kursları var. İnternetin etrafına dağılmış birçok açık kaynak ve defalarca tavsiye edilen iyi kitaplar var.

Çok şey öğrendim, ancak çalışmam ağır parçalanmış, bu da beni gerçekten rahatsız ediyor. Çok isterdim Eğer bir yerlerde, izlemem gereken bir yol bulabilir ve kendimi sınırlandırmam gereken bir yığın bulabilirim, böylece bilgisayar biliminin hangi önemli bölümlerini okuduğumdan ve daha sonra sistematik olarak bu konulara yaklaşmadığımdan emin olabilirim.

Vikipedi ile ilgili sorun, size neyin temel olduğunu söylemediği ancak tam bir referans olmakta ısrar etmesidir.

MIT Bilgisayar bilimi ve Elektrik Müh. Ayrıca, hangi kursların zorunlu olduğunu ve hangi kişinin ilgisine / gereksinimine göre ne isteğe bağlı olduğunu söyleyemeyen çok sayıda kurs listesi vardır. Birinin farklı konuları incelemesi gereken bir düzenden bahsetmedim.

Sevdiğim şey, bu aptal gibi, izleyebileceğim bir liste oluşturmak.

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

Açıkça görebileceğiniz gibi, bilgisayar biliminin hangi konulardan oluştuğu hakkında çok az fikrim var.

Birisi, MIT Course ware'den (+ MIT OCW'de bulunmayan temel konular) önerilen dersleri önerilen bir çalışma sırasına koymuş olsa bile, bu oldukça yardımcı olacaktır.

Çoktan geçtiğim gönderileri listeleyeceğim (ve aradığım şeyi bulamadım)

https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major - en iyi cevap cse çalışmasına değmez diyor

https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science - MIT OCW'ye işaret eder

https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into

https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming


Tamamen? Tüm eğlenceli teorik şeyler de?

Evet, aslında eğlenceli teorik şeylerden hoşlanıyorum, konuyla ilgili anlayışımı artıracağını düşünüyorum (bu benim çevremde tartışma konusu olsa da). Ayrıca, CS arkadaşlarım CS işleri hakkında tartışma yaptığında kendimi yalnız hissediyorum veya çok fazla soru sorarak onları rahatsız ediyorum.
Optimus

2
Müfredatta, işlerin bir arada olduğu bazı adalar olduğunu unutmayın. Örneğin, grafik teorisinde nadiren lambda hesabına ihtiyacınız olmaz. Ayrıca, çevresinde mentorlara sahip olmanın iyi olabileceğini de düşünün - uygun bir eğitim kurumuna yakın mı yaşıyorsunuz?

Aslına bakarsan, ben profesörlerle arkadaşça davranıyorum ama onları her zaman rahatsız edemiyorum. İlk başta edindiğim çok fazla parçalanmış bilgiye katkıda bulundular.
Optimus

3
Bu durumda seçili bir kursa katılabilirsiniz - bu, profesyoları her zaman yanıltmanıza izin verir.

Yanıtlar:


24

MIT'den bir ders materyali gördüm ve şok ediciydi . 4xC [0,1] yüzer gibi bıraksalar bile, 32 bit ARGB yerine renkleri "Mavi" olarak geçen, VC5'i gerektiren, örtük küresel değişkenler gerektiren öğretim materyalleri vardı. Büyük bir üniversiteden geldiği için bir müfredata veya koda güvenmezdim.

Benim CS derecem (İngiltere'de CS için en iyi 10 olan bir üniversiteden):

İlk yıl:

  1. OOP - süper temel bilgiler
  2. Bilgisayar Sistemleri - ikili tamsayı gösterimleri gibi şeyler.
  3. Temel ilişkisel veritabanı teorisi
  4. CS için matematik - basit 2D ve 3D geometrisi.
  5. Birazcık HTML / JS - tamamlayıcı acemi
  6. Aynı derecede küçük bir PHP parçası.
  7. Biraz fonksiyonel programlama

İkinci yıl:

  1. Hesaplamada yasal konular, kullanıcı verilerinin korunması etrafında dönen yasalar
  2. Programlama dilleri-Chomsky hiyerarşisi ve lexing ele alındı
  3. İşletim Sistemleri, Ağlar ve İnternet - çoğunlukla sanal bellek ve çağrı, IP yığını gibi şeyler
  4. 2D bilgisayar grafikleri - çoğunlukla altta yatan matematiğin teoremlerini kanıtlıyor
  5. Yapay sinir ağları, Bayesan inanç sistemleri vb.
  6. Gereksinim analizi - UML'ye genel bakış, işlevsel / işlevsel olmayan gereksinimler.
  7. Takım projesi

Üçüncü yıl:

  1. Algoritma analizi - çoğunlukla karmaşıklık teorisi
  2. Programlama dillerinin uygulanması - LL / LR ayrıştırma teknikleri, CFG'ler ve benzeri şeyler.
  3. Yazılım Proje Yönetimi - Şelale / Çevik modellere bir bakış
  4. Uluslararası Bilgi İşlem-Unicode ve diğer yerelleştirme eğlencesi
  5. Gelişmiş AI, dürüstçe bilmiyorum ve yakında bir sınavım olacak
  6. 3B bilgisayar grafikleri - çoğunlukla tekrar, sadece rotasyon matrisleri için teoremleri ispatlamak
  7. Temsilci Tabanlı Sistemler - çoğunlukla iletişim kurma, grup kararlarına ulaşma vb.
  8. Mikroişlemci Uygulamaları - dijital sinyal işleme
  9. Robotik - bilgisayar görüşü ve robot karar verme gibi şeyleri üst düzeyde kapsar

Farkedeceğiniz gibi, hemen hemen her şey bir şeyin "temelleri" dir ve neredeyse hiçbir şey yararlı bir derinlikte değildir.

Aslında yapmaya değen şeyler, esastır:

  1. OOP- ve sonra biraz daha, sonra biraz daha
  2. İşlevsel programlama - ayrıca biraz daha. Her iki stili de kapsayacak şekilde sözdizimini ve araçlarını yeniden öğrenmek zorunda olmadığınız C ++ veya C # gibi bir dil seçmeye çalışın.
  3. İşletim sistemi kısmi-sanal belleği, çekirdek modu ve kullanıcı modu gibi, bilmek iyidir. Bölümlendirmeyi ve IP yığınını atla.
  4. Gereksinim analizi - Herhangi bir proje için yararlı olmalı
  5. Algoritma analizi - algoritmik karmaşıklığın ne olduğunu, nasıl azaltılacağını ve ortak işlemlerin karmaşıklığının ne olduğunu bilmek.
  6. Yazılım proje yönetimi modelleri - birçok dükkan Çevik ve birçok eski olan hala Şelale tarzı modeller yapıyor.
  7. Uluslararası bilgi işlem - Unicode esastır

İsteğe bağlı olarak yapmaya değer şeyler:

  1. Programlama dilleri-Chomsky hiyerarşisi, lexing ve ayrıştırma araçları LL veya LR ayrıştırıcılarının ardındaki teoriyi atlayın - bir LR ayrıştırıcısı hemen hemen her türlü gerçekçi net olmayan CFG'yi kabul edebilir ve ayrılmadığında, ayrıştırıcı jeneratörünüzün dokümantasyonu size bunu söyleyecektir.
  2. 3B Grafikler. "Bunun bir dönme matrisi formülü olduğunu kanıtlayın" demek, zaman israfı, gerçek demek "Bu, bir köşe gölgelendiricisidir" gibi şeyler veya GPGPU. Bu eğlenceli, ilginç ve farklı.
  3. AI öğelerinin bazıları eğlenceye benziyor, potansiyel alanlar ve yol bulma.

Önemli olan ama yine de yapmadım.

  1. Eşzamanlılık - bir zorunluluktur bilmelisiniz, en azından 2012'de herkes için temel bilgiler.

Gerisi tam bir zaman kaybıydı. Ne yazık ki, bu dokuz noktanın çoğu zaten biliyordum ya da başka bir yerdeki faydalı parçaları topladım. FizzBuzz problemi gibi şeyler hakkında bir şeyler okursanız , hızlı bir şekilde anlaşılır hale gelir ki, lisansımdan ve çevrimiçi olarak gördüğüm materyallerden birçoğu , paketin tepesinde olmak için bu kadarını bilmek zorunda değilsiniz. Çünkü diğer dereceler gerçekten pek bir şey öğretmiyor.


3
@ ThorbjørnRavnAndersen: Teori, kod yazmak için bir araçtır, daha fazlası değil. Bir teori, daha iyi kod yapmak için kullanamazsanız hiçbir şeye değmez.
DeadMG

3
@Optimus: Tüm teorilerin büyük çoğunluğu daha iyi kod yapmanıza yardımcı olamaz.
DeadMG

3
Teori, hangi kodun yazılabileceğini ve hangilerinin yazılmayacağını bilmenin temelidir.

17
Bu yazıda bazı çok iyi tavsiyeler var, ancak bazı alanları zaman kaybı ilan etmek konusunda çok dogmatiksiniz. Bugünlerde programlama işlerinde oldukça fazla çeşitlilik var ve bir iş için zaman kaybı ne başka bir iş için gerekli olabilir. Bir şeyi zaman kaybı olarak reddetmek yerine, içinde bulunduğunuz gelişme türlerini tanımlamakta fayda var.
Charles E. Grant

4
Son birkaç yılda çok fazla görüşme yaptım ve bugünlerde kolejlerdeki en büyük boşluk veri yapılarını ve algoritmalarını öğretmek gibi görünüyor. İkinci en büyük boşluk, araçların dahili olarak nasıl uygulandığını anlamaktır. Kanımca, belirli bir aracı kullanma dersleri zaman kaybı. Bir karma tabloyu ne zaman ve ne zaman bir ağaç kullanacağınızı açıklayamıyorsanız, C ++ sözdizimini bilmenin pek bir anlamı yoktur.
Robotu

5

Açık Ders gereçleri, yalnızca sağladıkları derslerin bir listesidir. Bir öğrencinin ne alacağını bilmek istiyorsanız, MIT'nin (OCW üyesi olmayan) web sitesini ziyaret edin ve gerçek programa bakın. Neyin gerekli olduğu ve neyin önkoşul olarak kabul edildiğinin bir listesi vardır. İşte onların sayfası.


İçine bakıyorum, ama gereksinimlerini oldukça özlü buldum. ve uzun kurslar nerede?
Optimus


teşekkürler, bu da faydalı olacak, büyük üniversitelerin hangi müfredattan sonra izlediklerini bilmek güzel
Optimus

1
Şu anda Berkeley'de EECS yapıyorum. MIT EECS programı Berkeley gibi herhangi bir şeyi yapılandırırsa, o zaman çok fazla rehberlik edemezsiniz: kısa bir giriş dizisine sahibiz ve sonra ne kadar olursa olsun, en az sayıda gelişmiş yaptığınız sürece tam olarak istediğiniz şeyi yapın. dersler. Bence bu harika, ancak muhtemelen hangi dersleri alacağınızı belirlemenize yardımcı olmaz: Aynı kararları kendim vermem gerekti. (Fakülte danışmanımdan yardım aldım, ancak tesadüf eseri onun tavsiyesi lisansüstü seminerine katılmak oldu :)).
Tikhon Jelvis

@TikhonJelvis Ne öğrenmek istediğinizi ve neyi istemediğinizi seçmek, alanın kapsamının ne olduğu ve en azından hangi kapsamın ele alınması gerektiği hakkında bir fikriniz olduğunda daha kolaydır. Ben bir İnşaat Mühendisliği Mezunu olan Bilgisayar Bilimi ve Müh. Alan
Optimus

5

Buraya bağlanan ACM / IEEE'den 2001 Bilgisayar Bilimleri müfredat önerilerini deneyin: http://www.acm.org/education/curricula-recommendations

2008 CS güncellemeleri ile birlikte.

2001 raporunun 17. sayfasında, tüm "temel" bilginin altını çizen ve hala seçmeli dersleri listeleyen kullanışlı bir çizelge bulunmaktadır.

Bir lisans programının bu önerilere göre temel kabul edilen dersleri bile kapsayacak zamanı olmaz, bu nedenle bazı kategorileri bir araya toplar ve öğrencilerin aralarında seçim yapmasına izin verir (örneğin, İşletim Sistemleri, Programlama Dilleri ve Yazılım Mühendisliği Yazılım ve öğrenciler bir parça seçer).

Gerekli dersleri hemen hemen her okul için CS departmanı web sitesinde bulabilirsiniz ve bunun bir versiyonu olmalıdır.


iyi, biraz eski ama yine de normal bir müfredatta seçime bırakılmış birçok ders burada çekirdek sayılıyor, sıraya konmuş şeylerden kaçarsanız daha geniş bir çalışma seçeneğine sahip olmak güzel +1.
Optimus

Tembeller için, bu liste şunları içerir: Ayrık Yapılar (DS) Programlamanın Temelleri (PF) Algoritmaları ve Karmaşıklığı (AL) Mimarisi ve Organizasyonu (AR) İşletim Sistemleri (OS) Net Merkezli Hesaplama (NC) Programlama Dilleri (PL) İnsan-Bilgisayar Etkileşim (HC) Grafik ve Görsel Bilgi İşlem (GV) Akıllı Sistemler (IS) Bilgi Yönetimi (IM) Sosyal ve Mesleki Sorunlar (SP) Yazılım Mühendisliği (SE) Hesaplamalı Bilim ve Sayısal Yöntemler (CN).
Damien Roche,

-4

Mümkünse, github.com'a öğrenme sürecinizin bir parçası olarak katılmayı önermek isterim .

Ardından, ilgilendiğiniz gerçek dünya uygulamalarına sahip kodları arayabilir, kendiniz için kopyalayabilir, üzerinde çalışabilir, üzerinde kod oluşturabilir ve tanımaya başlayabilir ve sonunda kaynak projeye düzeltme ekleri göndermeye başlayabilirsiniz. ve hattın aşağısında, ilginizi çeken açık kaynaklı bir proje üzerinde çalışıyor olmalısınız.

Ve tabii ki git ile tanışacaksınız, ki bu daha iyi.


5
-1: Değerli olsa da, bu onu bilgisayar bilimlerinde bilmesi gereken teorik yönlere maruz bırakmaz.
Ken Bloom,

orada yapıldı, ayrıca kişisel bir git deponuz var, Github'un etrafına asılmak sizi daha iyi bir programcı yapar
Optimus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.