Hangi Bilgisayar Bilimi kavramlarını bilmeliyim? [kapalı]


95

Bilgisayar Bilimindeki hangi kavramların sizi daha iyi bir programcı yaptığını düşünüyorsunuz?

Derecem Makine Mühendisliği bölümündeydi, bu yüzden bir programcı olarak sona erdiğim için temel bilgilerden biraz eksikim. Son zamanlarda öğrendiğim, özellikle ne yaptığımı daha derinlemesine anlamamı sağlayan birkaç standart bilgisayar bilimi kavramı var:

Dil özellikleri

  • İşaretçiler ve Özyineleme (Teşekkürler Joel!)

Veri Yapıları

  • Bağlı Listeler
  • Hashtables

Algoritmalar

  • Kabarcık Sıralaması

Açıkçası, liste şu anda biraz kısa, bu yüzden şu konularda öneriler almayı umuyordum:

  1. Hangi kavramları anlamalıyım
  2. Bunları doğru bir şekilde anlamak için herhangi bir iyi kaynak (Wikipedia bazen biraz yoğun ve akademik olabileceğinden).

5
Kabarcık türleri? Onlardan olabildiğince uzak durun! Bunun yerine, hızlı sıralama / yığın sırasının nasıl çalıştığını öğrenin.
Carra

18
Evet, balon sırasını öğrenin. Neden korkunç olduğunu öğrenin. Hızlı sıralama, birleştirme ve diğer her şeyi, bireysel zayıflıkları da dahil olmak üzere öğrenin. Ancak bunları üretim koduna yazmayın: hangi platformda olursanız olun sağlanan sıralama işlevlerini çağırın.
Brian Ensink

@Roger Pate - +1, sizin için bir algoritmanın veya veri yapısının ne için iyi olduğunu ve neyin berbat olduğunu bilmeli. Hem Quicksort hem de Bubblesort, aynı en kötü durum performansına sahiptir [O (n ^ 2)], ancak çok farklı giriş türleri için ve Bubblesort, QS'nin hala O (n log n) olduğu O (n) için en iyi durum performansına sahiptir. Elbette, Bubblesort'u düşünüyorsanız, bunun yerine Yerleştirme sıralamasına gitmek isteyebilirsiniz.
Andre Artus

Yanıtlar:


60

Steve Yegge (eski adıyla Amazon'da, şimdi Google'da) tarafından yazılan bu blog gönderisine bir göz atın:

Geliştiricilerin bilmesi gereken en önemli beş kavram hakkında bazı ayrıntılara giriyor:

  1. Temel programlama (özyineleme, dosya G / Ç, biçimlendirilmiş çıktı, döngüler vb. Dahil)
  2. Nesneye yönelik tasarım (tasarım desenleri vb. Dahil). Kavramları anlamanın yanı sıra mantıklı OO tasarımları üretebilmelisiniz.
  3. Komut dosyası oluşturma ve normal ifadeler.
  4. Veri yapıları - listeler, kümeler, hashtable'lar, ağaçlar, grafikler ve benzeri - Big O gösterimi ve algoritmik karmaşıklık.
  5. Bitler, baytlar ve ikili sayılar - sayıların bilgisayarda nasıl temsil edildiği ve nasıl işleneceği.

Güzel bağlantı. Biraz unix tarafına odaklanmış, (.NET'i tamamen eksik) ama yine de güzel.
Toon Krijthe

Harika bağlantı - üzerinde çalışmam gereken çok şey var, keşke bunları açıklayan iyi sayfalara bağlantılar olsaydı.
Jon Artus

Bağlantı, kendimi kontrol etmem ve temel bilgileri yakalamam için çok faydalı olacak. Teşekkürler ..
rpr

Kabul edildi, harika bağlantı. Tanımlanan olası çözümlerin çoğu Unix tabanlı olsa da, ilgili genel kavramlar çok dilden / platformdan bağımsızdır. Çoğu programcı için özyineleme, ağaçlar gibi ADT yazma ve bitsel işlemler gibi şeyler oldukça nadirdir, ancak bunlar önemli bir temeldir.
Zach Burlingame

4
Normal ifadeler dışında her şeye katılıyorum. Bunlar güzel bir bonus, ancak çoğu şey zemin seviyesinde temeller, her şeyin üzerine inşa edildiği temeldir ... normal ifadeler harikadır, ancak bunları hiç kullanmayan ve hiç ihtiyaç duymayan çok sayıda harika programcı tanıyorum.
Beska

35

Algoritmaların Big-O gösterimini ve Big-O tahminlerini kesinlikle anlamalısınız - ne olduğunu, nasıl kullanıldığını, neden önemli olduğunu, Big-O tahminlerine göre iki algoritmayı nasıl karşılaştırdığınızı, Big-O tahminlerini nasıl oluşturduğunuzu kesinlikle anlamalısınız. basit algoritmalar için.


1
Bağlantı verdiğim bir Wikipedia makalesiyle başlayabilirsiniz - hem oldukça basit hem de matematiksel olarak doğru.
keskin dişli

3
İleri matematik konusunda oldukça düşük bir fikriniz olmalı. Bunu üniversitedeki ilk yılımda, matematikte sadece yarı yolda olduğumda anladım.
GoatRider

1
NP kavramını unutmayın ve içinde bir sorun olduğunda, bir arama amacı için her veritabanı işlemine bir TSP'yi (Traveling Salesman) kodlamaya çalışan bir geliştirici veya böyle bir aptallık büyük bir sorundur =]
Ed James

2
Ayrıca büyük O''nun hangi algoritmanın daha az zaman aldığını söylemediğini de bilmelisiniz. Çoğu bilgisayar bilimi mezununun kavrayamadığı bir şey
Martin Beckett

3
Bu bir tür. Girdi kümesine bağlı olduğundan hangisinin daha hızlı olduğunu değil, hangisinin en kötü durumda olduğunu size söyler.
Ed James

30

Bilgisayar bilimleri konularını aramanızı biraz komik buluyorum, ancak wikipedia'yı fazla akademik buluyorum: D

Her neyse, burada, belirli bir sıra olmadan:


2
+1 çünkü veritabanlarından bahsetmiştiniz, bu tür listelerde genellikle göz ardı edilir, ancak çok yönlü bilgisayar bilimleri mezunlarının bilmesi gereken çok önemli bir kavram.
Brian Ensink

14

Gelişimime yardımcı olan bazı kavramlar (akıl ve kod):

  • Sözcük oluşturma, Ayrıştırma, Dize eşleştirme, Regex
  • Memoization
    • kapsülleme / kapsam belirleme / kapatmalar
    • Önbelleğe almak
  • Özyineleme
  • Yineleyiciler / Oluşturucular
  • İşlevsel programlama - John Hughes'un harika makalesi beni "neden" e götürdü

Bunlar, ayrık matematiğin tüm alanlarıdır, ancak CS için ciddi bir giriş gereklidir:

  • Matris / Doğrusal Cebir
  • Grafik teorisi

Her ne kadar Mark Jason-Dominus tarafından dersler ve makaleler genellikle Perl hacker yönlendirilir, herhangi programcı özellikle onun net sunum ve gerçek kod yararlanacak düşünüyorum Yüksek mertebeden Perl .


10

Bugünlerde Nesne Yönelimli Programlama anlayışının, her gün kullanmanız gerekmese bile, bir zorunluluk olduğunu söyleyebilirim.

Bundan en yaygın kalıpları anlamanın da yardımcı olabileceğini söyleyebilirim.


10

Birkaç iyi bilgisayar bilimi kavramının tanımlandığını ancak Matematik hakkında çok az konuşulduğunu görüyorum.

Ayrık matematiğe bakmanızı öneririm . Koşulları kodda yazmanıza yardımcı olan mantıksal ispatlar ile başlayan çok çeşitli yararlı problemlere sahiptir. Grafik teorisi ve kombinatorik ayrıca karmaşık problem çözme ve algoritma optimizasyonuna yardımcı olur.

Matematik konusundayken, doğrusal cebir tipik olarak ileri bilgisayar grafikleri dersleri için bir ön koşuldur.


1
Yalnızca birini seçmek zorunda kalsaydım, bu ayrık matematik olurdu. Bu hemen hemen CS 101. Genel programlamada bir şekilde DM'nin dokunmadığı bir alan veya paradigma düşünmek bana zor geliyor.
Andre Artus

7

Programcı Yetkinlik Matrisi bunu ayrıntılı olarak ele aldı, ancak birkaçını vurgulayacağım:

  • Veri Yapıları
    • B-ağaçları, iki terimli ve fibonacci yığınları, AVL / Kırmızı Siyah ağaçlar, Eğimli Ağaçlar, Listeleri Atla, denemeler gibi gelişmiş veri yapıları.
  • Algoritmalar
    • Ağaç, Grafik, basit açgözlü ve böl ve fethet algoritmaları, bu matrisin seviyelerinin alaka düzeyini anlayabilir.
  • Sistem programlama
    • Tüm programlama yığınını, donanımı (CPU + Bellek + Önbellek + Kesmeler + mikrokod), ikili kod, derleme, statik ve dinamik bağlama, derleme, yorumlama, JIT derlemesi, çöp toplama, yığın, yığın, bellek adresleme ...
  • Kaynak Kodu Sürüm Kontrolü
    • Dağıtılmış VCS sistemleri bilgisi. Bzr / Mercurial / Darcs / Git'i denedi
  • Derleme Otomasyonu
    • Sistemi ve ayrıca belgeleri, yükleyicileri oluşturmak, sürüm notları oluşturmak ve kodu kaynak kontrolünde etiketlemek için bir komut dosyası kurabilir
  • Otomatik test
    • Otomatikleştirilmiş işlevsellik, yük / performans ve UI testlerini anlar ve kurabilir
  • Problem Ayrıştırma
    • Uygun veri yapılarının ve algoritmaların kullanılması ve sorunun değişime tabi olan yönlerini kapsayan genel / nesneye yönelik kod ortaya çıkar.
  • Sistemlerin Ayrıştırılması
    • Birden çok ürün grubu ve harici sistemlerle entegrasyonlarla karmaşık sistemleri görselleştirip tasarlayabilir. Ayrıca izleme, raporlama, arıza giderme vb. Operasyon destek sistemlerini tasarlayabilmelidir.

5

Önce derinlik, önce nefes arama, en kısa yollar gibi bazı uygulamalı algoritmaları ve grafikleri çok faydalı buluyorum. Nesne yönelimi de gerçekten yaygın bir kavramdır.


4

Kural 1: Yazılım Bilgi Yakalamadır . Yazılım bir şey ifade ediyor. Anlamı konusunda emin değilseniz, ne yaptıklarını anlamak için kullanıcılarla konuşmaya daha fazla zaman ayırın.

Algoritmalar ve Veri Yapıları aynı madalyonun iki yüzüdür. Algoritma veri yapısına, veri yapısı algoritmaya bağlıdır.

Kabarcık sıralamayı olabildiğince çabuk unutun. Ciddi anlamda. Tüm modern diller (Java, Python, vb.), Kabarcık sıralamasından daha iyi bir sıralama uygulayan koleksiyon sınıflarına sahiptir. Kabarcık sıralamayı herhangi bir şey için kullanmanız gereken hiçbir koşul kesinlikle yoktur. Sıralama yöntemi içeren bir koleksiyon sınıfı aramanız gerekir. Daha iyisi, sıralamayı tamamen engelleyen bir algoritma aramanız gerekir.

Birkaç dil öğrenmelisiniz.

  • Programlama dili (Java, Python vb.)

  • Kabuk dili.

  • Veritabanı dili (SQL)

  • Sunum dilleri (HTML ve CSS)

  • Diğer veri temsil dilleri (XML, JSON)

Birkaç veri yapısını öğrenmelisiniz.

  • Diziler (listeler, demetler, dosyalar)

  • Hiyerarşik (XML ve HTML belgeleri ile temel dosya sistemi gibi)

  • İlişkisel (veritabanları ve sert ve yumuşak bağlantıların atıldığı dosya sistemi gibi)

  • Karma Haritaları ve Ağaç Haritaları içeren Haritalar (veya Dizinler veya İlişkili Diziler)

  • Setleri

Artı bazı algoritmik karmaşıklık analizi. Bazen "Big O" olarak adlandırılır. Kabarcık sıralamanın neden kötü olduğu, hızlı sıralamanın O ( n log n ) olduğu O ( n ^ 2 ) olmasıdır.


Bilgin olsun, gerçekten bir balon sıralaması kullanmam! Nasıl çalıştığını öğrenmenin ilginç bir deneyim olduğunu yeni buldum ve insanların seçtikleri dilde yazmak için yeterince iyi anlamaları gereken birkaç başka algoritma daha olduğunu anladım.
Jon Artus

Sayısız algoritma var. Çoğu kötü. Bazıları iyi. Bubble Sort, tek kelimeyle kötüdür. Algoritmalar hakkında HERHANGİ bir kitap satın alın ve devam edin.
S.Lott

Sadece nit toplama, ancak Quicksort en kötü durumdur O (n ^ 2). Bunu sadece bunun neden doğru olduğunu anlamanın, temel algoritmaları incelerken değerli bir eğitim alıştırması olduğunu düşündüğüm için belirtiyorum.
Brian Ensink

Hızlı sıralama için, evet - önemli bir egzersiz. Kabarcık sıralaması için tek şey, algoritmanın ne kadar kötü olduğunu görmektir. Tipik ve en kötü durumu anlamak genel olarak önemlidir.
S.Lott

4

Pekala, solucan konservesi şimdi açık! :)
Elektrik Mühendisliğinde başladım.

İlişkisel Veritabanı Tasarımı: Verilerin kaydını tutmak "Kindergarden Cop" daki Arnold gibidir.
Tam bir kaos olabilir. Kontrol edilmelidir.
Verilerinizi, en az bilgi kopyası ile en az yerde nasıl saklayabilirsiniz. Verilerinizi nasıl hafif ve kolayca erişilebilir tutabilirsiniz? Veri büyümesi ve bütünlüğü nasıl kontrol edilir.

Kullanıcı Arayüzü (UI) Tasarımı: Bu, Kullanıcının izlediğimiz verilere nasıl erişmesi gerektiğidir .
Çoğu kullanıcı arayüzü geliştiriciler tarafından tasarlanmıştır. Bu nedenle, çoğu kullanıcı arayüzü maalesef veritabanı tasarımına paraleldir. Kullanıcılar veri tasarımını hiç umursamıyor. Onlar sadece istediklerini istiyorlar. Kolayca elde etmek istiyorlar. Genellikle bu, veri tasarımı ve Kullanıcı Arayüzünden büyük bir ayrımı gerektirir. "Mühendislik" i sizi "güney konukseverliğinden" ayırmayı öğrenin.

Nesneye Yönelik Programlama: Birçok dil bu biçime indirgenir.

Paralel İşleme - Çoklu İş Parçacığı: Çoğu işlemci işi hızlandırır!
Paralel bilgisayarlar onlarca yıldır ortalıkta. Bir süredir masaüstümüzde duruyorlar. "Bulut bilişim" olayı ile birlikte, büyük paralel işlem yalnızca zorunlu değil, aynı zamanda tercih edilir. İnanılmaz derecede güçlü! Paralel geliştiriciler için çok fazla iş potansiyeli var.

İş Kurallarını Anlamak: Bu, mantıksal bir çok tablo oluşturmanıza yardımcı olur.
Birçok IFblock koşulu, iş kuralı tablolarında yer alabilir. Mantığı değiştirmek için tablodaki bilgileri değiştirmeniz yeterlidir. Az / Yeniden kodlama yok. Az / Yeniden derleme yok.

Olaylar Denetleyin ... Yöntemler işi yapar:
Kodunuzda her şeyi ayrı tutun. Gelecekte başkalarının güncelleme yapmasını kolaylaştırır. Ayrıca Model / Görünüm / Denetleyici (MVC) çerçevesine biraz paraleldir.

PJ


3

Benim için üniversitede aşağıdaki kurstan çok şey aldım

  • Proje Yönetimi
  • İnsan Bilgisayar Etkileşimi (Meraklıların daha kullanıcı dostu ekranlar yapmamıza yardımcı olur)
  • Veritabanı Tasarımı (Veritabanlarının nasıl çalıştığı, işlem günlükleri, kilitleme vb. Dahil)
  • Veri depolama
  • Grafikler (OpenGL)
  • Gelişmiş Algoritmalar
  • Veri yapıları

Üniversitede yapmayı dilediğim şeyler

  • Derleyici İnşaatı
  • Tasarım desenleri
  • Otomata teorisi

3

MANTIK - Programlamada mantığın önemini abartıyorum. Makine Mühendisliği yaptığınızı söylediniz, bu yüzden ne kadar matematiğin hayatınızı kolaylaştıracağını bilmelisiniz.

Önerme Mantığı , Birinci Derece Mantık , İkinci Derece Mantık : bunlar çok güçlü araçlardır. Muhtemelen üniversitede öğrendiğim en (ve tek) önemli şeyler. Mantık, bir programcının ağır silahı gibidir - çok sayıda karmaşık sorun (ve daha az karmaşık olanları), onları organize, mantıklı bir forma koyduğunuzda çok daha basit hale gelir. Makine Mühendisleri için Doğrusal Cebir gibi.


3

Bir derleyicinin nasıl çalıştığını iyi anlamanın iyi olduğunu düşünüyorum. Aho, bir derleyici oluştururken kullanılan kavramlar üzerine klasik bir kitaba sahiptir. Başlık, Derleyiciler: İlkeler, Teknikler ve Araçlar'dır. Takma adı Ejderha Kitabı'dır. Bu kitabı gerçekten anlamak için resmi dilleri anlamanız gerekir. Hopcroft'un bu konuda iyi bir kitabı var - Otomata Teorisine Giriş, Diller ve Hesaplama.



2

Burada zaten birçok iyi yanıttan bahsedildi, ancak önemli olanın bir alt kümesini eklemek istedim, ancak şimdiye kadar ele alınmadı.

15 yıllık lisans sonrası profesyonel Yazılım geliştirmeden sonra, okulda aşağıdaki kavramlardan bazılarını düzenli olarak kullandığımı görüyorum:

  • Genel OO kavramları ve modern programlama dili özellikleri (sınıflar, veri gizleme, vb.).
  • Algoritma performans ölçütleri (Büyük O gösterimi). Bir algoritma tasarlarken, algoritmanın maliyetini belirlemek için bir Big O analizi yapmak ve darboğaz alanlarında daha verimli alternatiflere bakmak.
  • Bağlı listeler ve diğer karmaşık veri yapıları.
  • Hızlı sıralama ve farklı sıralama konseptleri.
  • Ağaçlar ve hızlı ağaç manipülasyonu.

Diliniz / platformunuz Çöp Toplama'yı desteklemiyorsa, bellek ayırma ve temizleme kritik önem taşır ve listeye eklenir.


2

Ayrık matematik oy veriyorum. Bilgisayar bilimi soyutlamadır. Matematikçi gibi düşünmeyi öğrenmek çok faydalıdır.

S.Lott'un diller hakkında söylediklerine de eklemek istedim. Bir sürü TÜR dil öğrenmek de önemlidir. Yalnızca komut dosyasıyla derlenmemiş. Ancak işlevsel (ML, Lisp, Haskell) mantıksal (Prolog) nesne yönelimli (C ++, Java, Smalltalk) zorunludur (C, Pascal, FORTRAN çift).

Ne kadar çok programlama paradigması bilirseniz, yeni yeni dil ortaya çıktığında yeni dilleri almak o kadar kolay olur!


2

İşletim sistemi kavramlarından bazıları

 ( memory, IO, Scheduling, process\Threads, multithreading )

[iyi bir kitap " Modern İşletim Sistemleri , 2. Baskı, Andrew S. Tanenbaum"]

Temel Bilgisayar ağları bilgisi

[ Tanenbaum'dan güzel bir kitap

OOPS kavramları

Sonlu otometa

Bir programlama dili (önce C'yi, sonra C ++ 'ı öğrendim)

Algoritmalar (Zaman \ uzay karmaşıklığı, sıralama, arama, ağaçlar, bağlantılı liste, yığın, sıra)

[ Algoritmalara Giriş için iyi bir kitap ]


otomatik meta? - ilk düzenlemeye göre kesinlikle "otomata".
Tom Duckering

Oops! Sanırım yazım denetimi yapmak için boğulmuş. Ben düzelteceğim. Teşekkürler.
aJ.


1

Tüm programlama seviyelerini anlamaya çalışın. En düşük seviyeden (montaj) en yüksek seviyeye.

Örneğin kolay bir özellik olan özyinelemeyi ele alalım :) Assembly'yi öğrenmeye çalışın ve assembly'de özyinelemeyi kullanacak bir program yaratın.


1

Algoritmalar.

Bir programlama dilini inişli bir şekilde kullanmayı öğrenmek, ilerledikçe öğrenebileceğiniz bir şeydir, ancak yaygın olarak kullanılan tüm Algoritmaları kendi başınıza icat etmek neredeyse imkansızdır. bazı problemlerle.

Örneğin, kabarcık sıralama ile bazı programlar yazılamaz ve kod ne kadar iyi olursa olsun, iyi kabul edilmesi beklenemez.

Özetlemek gerekirse - bir göz atın Algoritmalara Giriş'e

Ustalaşmanıza gerek yok, sadece neler olduğunu bilin ...



1

Açıkça Nesne yönelimli programlamanın iyi bir anlayışı, SOLID İlkeleri gibi iyi yol gösterici ilkelerdir. ve yerleşik kalıpları ve uygulamaları takip etme .

SOA veya DDD'ye bakarsanız, hepsi nihayetinde bir tür OOP konseptine geri dönüyor.

Bazı iyi OOP kitapları almanızı ve ayrıca başlamak için C # veya Java gibi zengin bir dil seçmenizi tavsiye ederim.

Grady Booch tarafından OOP

(PHP, Ruby adamlar lütfen bana olumsuz oy vermeyin, sadece ona başlangıç ​​için bazı örnekler veriyorum, burada kendi cevaplarınızı ve önerilerinizi sunabilirsiniz)



1

Size çalışmanız için belirli kavramlar söylemeyeceğim, bunun yerine çok çeşitli konularda çok fazla hafif okuma yapmanızı tavsiye ederim. Okuduğunuz her konuyu derinlemesine anlamak konusunda endişelenmeyin - bu noktada, ne tür bir soruna baktığınızı fark edebilmeniz daha önemlidir, böylece biraz daha fazlasını yapabilirsiniz. onunla gerçekten karşı karşıya kaldığınızda zamanında çalışma. Diğer bir deyişle, bir dizi nesneyi kaç şekilde düzenleyebileceğinizi veya bir alt küme seçebileceğinizi görmeniz gerektiğinde, "kombinatorikler" için yeterince bilgi sahibi olduğunuz sürece, bir kombinasyon problemini nasıl çözeceğinizi bilmiyorsanız sorun değil. .

Wikipedia, bu tür geniş kapsamlı gezinme için oldukça iyi bir kaynaktır, özellikle de başlangıçta gözden geçiriyorsanız. Daha da iyisi, özellikle Wikipedia'yı çok akademik veya erişilemez buluyorsanız, C2 wiki'dir . (Bu, ilginçtir ki, olan Ward Cunningham tarafından icat orijinal wiki).


0

Bence çoklu iş parçacığının arkasındaki temel teoriyi anlamak çok önemlidir, bu olmadan, bir pazar sabahı saat 4'te canlı bir sunucuda hata ayıklayana kadar bir sorun olabileceğini görmek bile zor olabilir.

Semaforlar, kritik bölümler ve olaylar.


0

Hayır, kabarcık sıralama değil, hızlı sıralama. Bu büyük-O şey-kabarcık sıralama ortalamaları O (n ^ 2), hızlı sıralama O (n * log (n)).


0

Aşağıdakilerin en önemli şeyler olduğunu söyleyebilirim

  • Nesne yönelimli programlama
  • İşletim Sistemi kavramları
    • Süreç ve Konu
    • Algoritmaları Planlama
  • Veri yapısı
    • Veri depolama ve toplama türü, türleri (bağlantılı liste, karma, dizi vb.)
    • Algoritmaları Sıralama
    • Algoritmaların karmaşıklığı

Ardından, dil ile ilgili belirli şeylere gidin. Umarım bu yardımcı olur !!


0

Alıntıyla başlayacağım:

"Sahip olduğunuz tek alet bir çekiçse, her şeye çivi gibi davranırsınız". (Abraham Maslow)

En önemli ilke, IMO, birçok farklı programlama paradigmasını, dilini bilmek ve kullanımınıza sunulan araçlar hakkında kendinizi iyi bilgilendirmektir. İster devasa varsayılan kütüphanesi veya AutoHotKey gibi küçük özel bir dil ile tamamen gelişmiş ana dil olsun, herhangi bir sorun hemen hemen her dilde çözülebilir. Programcının ilk işi, sorunun özelliğine göre neyi kullanacağını belirlemektir. Bazı kavramlar, ana hedefiniz ne olursa olsun konuya daha iyi bir yaklaşım sağlar - karmaşıklık, şaşırtma, performans, taşınabilirlik, bakım, küçük kod boyutu ...

Aksi takdirde, uzmanlaştıkları bir dilde umutsuzca bir şeyler yapmaya çalışan bazı programcılar gibi, problemi farklı programlama bağlamında çözmek önemsiz olabilir.

Bu tavsiye, günümüzün çok dilli projelere yönelik eğilimi ile birlikte gider (örneğin, C #, JS, CSS, XPath, SQL, XML, HMTL, RegExp gibi tek bir uygulamada birkaç dili içerebilen web uygulamalarını ve hatta farklı programlama paradigmaları (örneğin, C # son zamanlarda işlevsel programlama paradigmalarından bazı kavramları, lambdaları tanıttı).

Yani, temel şey sonsuza kadar sürekli öğrenmektir :)


0

Bence 3D Grafik herkesin öğrenmesi gereken bir şey. Veya en azından homojen vektörlerin ve matris dönüşümlerinin nasıl doğru bir şekilde kullanılacağı.

Yalnızca 3 boyutlu uygulamalar oluşturmak için değil, aynı zamanda robotlarda ters kinematik gibi mekanik alanlarda , momentleri hesaplarken ve daha pek çok şeyde yardımcı olabilir.

Öğretmenimiz kötü olmasına rağmen aldığım en iyi derslerden biri olan 3d grafikleri okuyana kadar doğrusal cebiri tam olarak anlamadım.


0

Birden çok çekirdeğe (hem CPU hem de GPU) sahip makineler standart hale geldiğinden, Dağıtılmış Algoritmaları (birden çok iş parçacığından birden çok makineye) dahil etmeyi söyleyebilirim . Çoklu iş parçacığı ve dağıtılmış işlemeyi anlamak çok önemlidir. Bağlantının pek fazla yardım sağlamadığı için üzgünüz.

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.