Paylasio programlama öğrenme kulübü Sıkça Sorulan Sorular

Paylasio programlama öğrenme kulübüne hoş geldiniz. Bu, bu alt başlıkta en sık sorulan sorulardan bazılarıdır. Sorumuz bunlardan biriyse, muhtemelen daha önce birçok kez cevaplanmıştır ve buraya göndermeden önce önceki cevapları bulmak için reddit'in arama özelliğini kullanmayı (kenar çubuğuna bakın) deneyebilirsiniz.


Başlangıç

Nereden başlamalıyım?

Eğer kodlamayı öğrenmekle ilgileniyorsanız, doğru zihniyetle başlamak çok faydalıdır. Kevin Cheers'ın bu YouTube videosu, başlangıçta sahip olmanız gereken doğru bakış açısını açıklamak için harika bir iş çıkarıyor.

Ardından, kodlamayı öğrenmek için evrensel olarak kabul görmüş bir yol olmadığını göz önünde bulundurmalısınız - herkes biraz farklı bir şekilde öğrenmeyi tercih ediyor ve sizin için en iyi işe yarayan bir yaklaşımı bulmak için biraz deney yapmanız gerekebilir. Yine de, insanların büyük çoğunluğu aşağıdaki yaklaşımı kullanarak en iyi şekilde öğreniyor gibi görünüyor ve şiddetle denemenizi öneriyoruz:

  1. Çözmek istediğiniz küçük bir problem veya proje bulun. Yaşamınızdaki küçük bir sorunu çözmek için bir araç oluşturmayı deneyebilir veya ilginç bulduğunuz bir programı sıfırdan uygulamaya çalışabilirsiniz. Bu proje, kodlamayı öğrenmeye devam etmek için sizi motive etmeye yardımcı olacak ve öğrendiklerinizi uygulama konusunda size fırsatlar sağlayacaktır.
  2. Projeniz için hangi programlama dilinin en uygun olduğunu bulmak için biraz araştırma yapın. (Tavsiyeler için aşağıya bakın)
  3. O dil için tek ve yüksek kaliteli bir başlangıç ​​odaklı kaynak bulun ve takip edin. (Yine, aşağıya bakın)
  4. Bu kaynağı google'da arama yaparak ve sorular sorarak destekleyin
  5. Sonunda o dili kullanarak birkaç önemsiz olmayan projeyi tamamlayın.

Yapmaktan kaçınmanız gereken bazı şeyler şunlardır:

  1. Kullandığınız kaynağı sadece pasif bir şekilde takip etmeyin. Alıştırmaları ve ödevleri yapın; uygulama, kodlamayı öğrenmenin kesinlikle olmazsa olmaz bir parçasıdır.
  2. Gereksiz yere programlama dilleri arasında geçiş yapmaktan kaçının; birini seçin ve ona bağlı kalın. Bunun nedeni, programlamanın temelde programlama dillerinden ziyade problem çözmeyle ilgili olmasıdır. Problem çözmeyi öğrenmek zordur ve bu beceriyi ancak uygulama yoluyla geliştirebilirsiniz. Her dil değiştirdiğinizde, öğrendiklerinizi uygulama konusunda pratik yaparak problem çözme becerinizi geliştirmek için harcayabileceğiniz zamanı kaybediyorsunuz.
  3. Bir öğreticiyi tamamladıktan sonra öğrenmeyi bırakmayın. Programlama, her zaman öğrenilecek yeni bir şey olan bir alandır.

Ve son olarak, kodlamayı öğrenmenin uzun ve zor (orijinal silindiği için wayback machine bağlantısı) bir süreç olduğunu unutmayın. Kodlamayı öğrenmek zor geliyorsa, cesaretiniz kırılmasın! Bu tamamen normaldir - birçok kişi yıllarca öğrenerek ve pratik yaparak geçirecektir, ancak kendilerini bir iş aramak veya önemli bir projeye katkıda bulunmak için yeterince yetkin görmeden önce. Neyse ki, sadece başlamak hiç de zor değil.

Hangi programlama dilinden başlamalıyım?

Bu soruyu sormaya neden olan iki yaygın yanılgı vardır. İlki, öğrenmek için gerçekte bir \"en iyi\" programlama dili olması ve ikincisi de öğrendiğiniz ilk dilin programlama kariyerinizin geri kalanını belirleyecek olmasıdır.

Gerçekte, başlamak için en iyi dil yoktur ve ilk dilinizin gelecekteki kariyeriniz üzerinde neredeyse kalıcı bir etkisi yoktur. Programlama dilleri yüzeyde çok farklı görünebilir, ancak temel kavramların çoğu dilden dile aktarılacaktır. Yeni bir dil öğrenmek de zamanla daha kolay hale gelecektir - bir aceminin ilk diliyle rahat hissetmesi aylar sürebilir; deneyimli bir programcı ise yeni bir dili birkaç günde öğrenebilir.

Tüm programcıların ideal olarak çeşitli dil türlerinde deneyime sahip olmaları gerekir. Bir dili öğrendikten sonra, bazı temel yönlerden farklı olan başka bir dile geçin. Daha fazla dil öğrenirken, elinizdeki göreve uygun doğru aracı seçmek için daha donanımlı hale geleceksiniz ve bu da iyi bir programcının ayırt edici özelliğidir. Programlama kavramları en önemli şey olduğundan, yeni başlayanlara aşağıdaki tablodan ana akım dillerden birini başlamalarını öneriyoruz. Bu dillerin hepsi, yeni başlayanların karmaşık dil özelliklerinin hiçbirini kullanmak zorunda kalmadan basit uygulamalar yazmaya başlamalarını ve programlamayı öğrenmelerini sağlar.

Zaten aklınızda bir proje veya hedefiniz varsa, çözmeye çalıştığınız probleme becerilerinizi uygulayabilirseniz daha hızlı öğreneceksiniz. Aşağıdaki tablo, yaygın projeler için bazı önerilen dil seçimlerini içerir:

... nasıl yapacağımı öğrenmek istiyorum ... Şunları kullanmayı düşünün:
... iPhone Uygulamaları yapmak Swift (daha fazla)
... Android Uygulamaları yapmak Kotlin/Java (daha fazla)
... bir web sitesi oluşturmak JavaScript, CSS, HTML5 (daha fazla)
... Windows masaüstü uygulamaları yazmak C#
... 2D/3D oyunlar yapmak JavaScript, C# veya C++ (daha fazla)
... Arduino/mikro denetleyiciler/robotlar programlamak C
... bilimsel/matematiksel hesaplama veya veri analizi yapmak Julia, Python, R veya Matlab
... otomasyon ve komut dosyası oluşturma yapmak Birçok dil (Python, Ruby, Bash, Powershell, AutoHotKey...)

Hala karar veremiyorsanız, Python'ı deneyin. Python, oyun yapmaktan evinizde veya iş yerinizde otomasyon yapmaya, veri analizi yapmaktan web siteleri oluşturmaya kadar neredeyse istediğiniz her şeyi yapmak için çok büyük bir topluluğa ve birçok kütüphaneye sahip, başlangıç ​​dostu iyi bir dildir. Daha karmaşık uygulamalara dalmadan önce kavramlara ve temel bilgilere odaklanan bir öğrenme kaynağı bulmaya çalışın.

İyi öğrenme kaynaklarını nereden bulabilirim?


Nasıl Geliştirebilirim

Başlangıç seviyesinden orta seviyeye nasıl geçebilirim?

Birçok yeni başlayan kişiden sık sık aldığımız bir soru da \"şimdi ne?\". Özellikle, bazı öğreticiler, kitaplar, ders materyalleri üzerinde çalışmayı denemiş olabilirsiniz, ancak temel olarak if ifadeleri ve for döngüsü gibi şeylerin nasıl çalıştığını anlamaktan, öğrendiklerinizi gerçekten uygulayarak karmaşık ve ilginç programlar yapmayı anlamaya geçişte zorluk çekiyorsunuzdur.

Bu atlayışı, giriş öğreticilerinden karmaşık koda kadar yapmak zor olabilir ve kodlamayı öğrenmenin normal bir parçasıdır. Bu makale bu olguyu çok iyi açıklıyor. Birçok öğretici (özellikle CodeCademy gibi ticarileştirilmiş \"kodlamayı öğren\" web siteleri), sizi temel bilgilerde adım adım yönlendirme eğilimindedir, ancak bu noktadan sonra dururlar ve birçok yeni başlayanı bocalamaya bırakırlar.

Ancak, devam ederseniz ve kafa karışıklığını atlatırsanız, sonunda kendinizi kademeli olarak daha iyi ve daha iyi hale gelirken bulacaksınız, ta ki bir gün, farkında olmadan, yetkinleşmeye başladığınızı göreceksiniz.

İşte devam etmek ve daha sonra ne yapmanız gerektiğiyle ilgili bazı öneriler.

  • Pasif öğrenmeden aktif öğrenmeye geçin

    Sadece sizin için (umduğunuza göre) öğrenmek istediğiniz şeyi öğretecek kurslar ve dersler almaktan ziyade, kendinize öğretmek için yollar aramaya aktif olarak başlayın. Örneğin, bir oyun nasıl yapacağınızı bilmiyorsanız, \"X'te bir oyun nasıl programlanır\" diye google'da arayın, burada \"X\" kullanmak istediğiniz programlama dilidir. Tanımadığınız bir hata mesajıyla karşılaşırsanız, google'da aramayı deneyin. Makine öğrenimi nasıl yapacağınızı mı öğrenmek istiyorsunuz? Google'da arayın ve iyi görünen bir ders kitabı, öğretici veya çevrimiçi kurs bulun.

    Çoğu zaman, tam olarak yapmak istediğiniz şeyi açıklayan öğreticiler veya en azından genel bakışlar ve daha özel arama sorguları oluşturmanız için ipuçları veren makaleler bulabilirsiniz. Daha genel olarak, yeni şeyler öğrenmek için araştırma yapmada bir utanç yoktur - aksine. Google'da arama yapmak ve araştırma yapmak, tüm programcıların, hem yeni başlayan hem de ileri seviye, sürekli olarak yaptığı bir şeydir.

    • Sürekli pratik yapın

    Programlama, bir bakıma egzersiz gibidir, yani gelişmenin ana yolu sürekli pratik yapmaktır. Basit başlayın ve komut satırında \"taş-kağıt-makas\" gibi basit bir oyun programlamayı deneyin. Bitirdikten sonra, daha iddialı bir proje seçmeyi deneyin ve onunla çalışın. Belki de işleri karıştırmak istiyorsanız, bazı programlama alıştırmaları yapmayı deneyin.

    Programlama, temelde uygulamalı problem çözmeyle ilgilidir ve problem çözmeyi öğrenmenin en iyi yolu, büyük ve küçük sürekli olarak problemleri çözmektir.

    (SSS: Pratik alıştırmaları ve proje fikirlerini nereden bulabilirim ve SSS: Proje için hiçbir yeni fikir bulamıyorum. Sadece yaratıcılık eksikliğim mi var? Diğer programcılar nasıl ilham alıyor?)

    • Problemleri nasıl ayrıştıracağınızı öğrenin

    Büyük bir proje veya problemle uğraşırken, işin ne kadar büyük veya ürkütücü göründüğüne bakarak cesaretinizin kırılması kolaydır. Korkmak yerine, problemi daha küçük ve daha küçük alt problemlere ayırmak (ayrıştırmak) üzerinde çalışın, ta ki her bir alt problem yönetilebilir ve yapılabilir görünene kadar.

    Örneğin, taş-kağıt-makas oyunu yapmak istediğinizi varsayalım. Eh, gerçekten ayrı parçalarına ayırırsanız, bu birkaç alt problemden oluşur: kullanıcıdan giriş nasıl alınır, bilgisayar rastgele bir seçenek nasıl seçer, kimin kazandığını nasıl söylersiniz ve tüm işlemi nasıl tekrar edersiniz (birden fazla oyun oynamak istiyorsanız).

    Her bir bu alt problemi nasıl çözeceğinizden emin değilseniz, daha fazla ayırmaya çalışın. Örneğin, kimin kazandığını bilmiyorsanız, daha fazla alt probleme ayırabilirsiniz: nasıl berabere kaldığınızı nasıl söylersiniz, nasıl kazandığınızı nasıl söylersiniz (taş seçtiğinizi varsayarak), nasıl kazandığınızı nasıl söylersiniz (kağıt seçtiğinizi varsayarak) ve nasıl kazandığınızı nasıl söylersiniz (makas seçtiğinizi varsayarak).

    Eğer kesinlikle emin değilseniz (örneğin, bilgisayarı rastgele bir seçenek nasıl seçtirirsiniz?), google'da arayın. Bu durumda, \"X rastgele bir seçenek seçsin\" (X kullandığınız programlama dili olduğunda) google'da arama yapmak, kullanabileceğiniz çeşitli yöntemleri ortaya çıkaracaktır. Bazen, bir problemi google'da aramadan önce birçok parçaya ayırabilirsiniz ve bazen hemen bunu yapmanız gerekir.

    Örneğin, Java öğreniyorsanız, oyun yazmayı öğrenmek istiyorsunuz, ancak nereden başlayacağınızı veya problemi nasıl ayıracağınızı bilmiyorsanız, \"java oyun öğretici\" diye google'da aramak, size hem oyun yazmayı öğretecek hem de (genellikle örtük olarak) bir oyun yazma sürecini daha küçük parçalara nasıl ayırabileceğinizi gösterecek birkaç iyi sonuç ortaya çıkaracaktır.

    Esasen, bir mühendisin zihniyetini kazanmaya çalışıyorsunuz. Bir problem büyükse, pes etmeyin. Daha küçük ve daha küçük parçalara ayırmaya devam edin ve indirgenemez görünen şeyleri araştırın. Ardından tekrarlayın, döngüyü sürdürün: ayrıştırın, google'da arayın, ayrıştırın, google'da arayın...

    Bu arada, bu kendi kendine öğretmek için oldukça etkili bir stratejidir! Pratik yaparken, problemleri nasıl ayıracağınızı daha iyi anlamaya başlayacaksınız ve bilginiz/problemlere olası çözümleriniz havuzunu genişleteceksiniz.

    Daha fazla öneri için SSS: Görevleri/problemleri programlara nasıl dönüştürebileceğim konusunda becerimi nasıl geliştirebilirim (Algoritmik düşünme)?'e bakın.

    • Sistematik olmayı öğrenin

    Kod yazarken ve hata ayıklama yaparken, sadece \"deneyip\" görme ve çalışmasını umma alışkanlığına asla kapılmayın. Mümkün olduğunca sistematik ve titiz olun ve \"deneme yanılma\" yönteminden kaçının.

    Kod yazarken, bir an durun ve saldırı için kaba bir planı kağıt üzerinde planlayın. Bazı diyagramlar çizmeyi veya bazı sözde kodları not etmeyi düşünün. Planınızı değiştirmeniz gerekiyorsa (ki büyük olasılıkla yapmanız gerekecektir), neden bu değişikliği yaptığınızı ve yeni saldırı planınızın ne olduğunu düşünün. (Bu planlama aşaması ayrıca problem ayrıştırmasını uygulamak için iyi bir zamandır!)

    Hata ayıklama yaparken, asla amaçsız olmayın. Bir bilim insanı gibi düşünmeye çalışın - hatayı düzeltmeyi denemek veya hatanın nerede olabileceğini daraltmak için deneyler yapın ve sonuçlarınızı kaydedin. Hipoteziniz/denediğiniz değişiklik yanlış çıktıysa veya bir şey beklemediğiniz şekilde çalıştıysa, durun, bir an durun ve nedenini anlayın. Deneylerinizi ve testlerinizi, sizi doğru yolda tutmasına yardımcı oluyorsa, bir defterde takip etmeyi düşünün.

    Hatalar, varsayımlarınız gerçeklikle uyuşmadığında oluşur. Bir şey \"yanlış\" hissediyorsa, görmezden gelmeyin - sorunun ne olduğunu/hangi yanlış varsayımı yaptığınızı belirleyene kadar izleyin.

    Sadece şansınıza kadar \"rastgele şeyler yapmayın\" - sistematik olun.

    • Hata ayıklama veya google'da arama yapmaktan çekinmeyin

    Tüm yeni başlayanların farkında olmadığı bir şey, hata ayıklamak veya google'da arama yapmak için daha fazla zaman harcamanın, hatta profesyonel programcılar arasında bile tamamen normal olmasıdır.

    Hata ayıklama (ve mücadele etmek!) kodlamanın olmazsa olmaz bir parçasıdır. Mümkünse, stresli veya sabırsız olmaktan kaçının. Bunu ilginç bir av veya bir bulmaca gibi düşünün!

    Gerçek kodu üzerinde herhangi bir ilerleme kaydetmiyor olsanız bile, bazı hatalar nedeniyle, sistematik olduğunuz sürece, problem çözme becerilerinizi hala pratikte uyguluyorsunuz, ancak farklı bir şekilde.

    Sonuç olarak, tek bir hata üzerinde çalışarak birçok saat harcasanız bile, yine de zamanınızı iyi kullandığınızı düşünmelisiniz. Hata ayıklama, problem çözmede iyi olmanın en iyi yollarından biridir!

    (Bu, daha deneyimli hale geldikçe daha da doğrudur. Meğer karşılaştığınız hataların zorluğu deneyim seviyenizle birlikte büyüyecek ve ölçeklenecektir. Deneyimli programcıların, özellikle kötü olduğu ortaya çıkan tek bir hatayı takip etmek için aylar harcamaları alışılmadık bir durum değildir.)

    • Yardım istemekten korkmayın

    Ve son olarak, tamamen sıkışıp kaldıysanız ve ne yapacağınızı bilmiyorsanız, yardım istemekten çekinmeyin!

    Programcılar genellikle çok yardımseverdir. Bizden birçoğu da kendi kendini yetiştirmiştir ve bu nedenle, yeni başlayan biri olarak mücadele etmenin ve tamamen sıkışıp kalmanın nasıl bir şey olduğunu anlıyoruz.

    Bir uyarı olarak, kendi çabanızı gösterdiğinizden emin olun (problemi ayrıştırmayı denediniz, hata ayıklamayı denediniz, google'da aramayı denediniz, vb.) ve iyi kalitede bir gönderi yazdığınızdan emin olun. Herhangi bir alt kültürde olduğu gibi, programcıların da belirli örtük kuralları ve beklentileri vardır. Önemli olanlardan biri, sorunuzun iyi yazılmış olmasıdır (temel olsa bile).

    Daha fazla bilgi için soru sorma kılavuzumuza bakın.

    • Daha titiz bir giriş dersi almaya çalışın

    Bu madde noktası, sadece programlamaya olan tek maruz kalmanız CodeCademy gibi gerçekten temel \"programlamaya giriş\" dersleri olmuşsa geçerlidir. Bu tür web siteleri, programlamanın nasıl bir şey olduğuna dair bir tad vermek ve temel bilgileri öğretmek konusunda iyidir, ancak orta seviyeye ilerlemeye çalışıyorsanız yardımcı olmayabilir.

    Genel bir kural olarak, aldığınız \"programlamaya giriş\" dersleri sizi gerçekten zorlamadıysa veya alıştırmalar ve mini projeler üzerinde çalışmanızı istemediyse, daha titiz birini bulmayı düşünmelisiniz. Sürekli pratik yapmak (ve mücadele etmek!) öğrenme sürecinin olmazsa olmaz bir parçasıdır.

    Bu atlayışı yapmak için daha fazla bakış açısı, öneri ve tavsiye için aşağıdaki gönderilere bakın:

Pratik alıştırmaları ve proje fikirlerini nereden bulabilirim?

Proje fikirleri:

Eğer bir proje yapmaya çalışıyorsanız, ilham almak için referans alabileceğiniz bazı fikir listeleri:

Pratik alıştırmaları:

İşte başlamak için bazı iyi siteler/kaynaklar:

  • Reddit'te

    • /r/dailyprogrammer - günlük programlama zorluklarına sahip bir alt başlık
    • Genel alıştırmalar:
    • Adım adım kodlama
    • Edabit
    • Leetcode
    • Codewars
    • Hackerrank
    • CodeAbbey
    • Codingbat.com
    • Ruby Quiz - Değişen karmaşıklıklarda kısa programlar yazmanızı isteyen bir dizi \"quiz\". Kanonik çözümler hepsi Ruby'dedir, ancak istemler dile bağlı değildir, bu nedenle referans için kesin bir çözüm olmaması sorun değilse, başka herhangi bir programlama dilini kullanabilirsiniz.
    • Konu özel alıştırmalar:
    • Project Euler - Matematiksel problemlere odaklanır (yani sayı teorisi, asal sayılar, sayı sistemleri) programatik bir şekilde çözülmesi amaçlanmıştır.
    • CodeByMath - Project Euler'e benzer, ancak muhtemelen daha basit problemlerle
    • Rosalind - biyoenformatik bir bükülmeyle problemler sunar.
    • Rekabetçi programlama alıştırmaları:
    • TopCoder - Diğer yarışmalardan toplanan algoritmik zorlukların bir koleksiyonuna sahiptir.
    • UVa Online Judge
    • CodeForces
    • Timus
    • SPOJ - UVA'ya benzer, çözümler için izin verilen en büyük programlama dili seçeneğiyle
    • USACO
    • Dile özel:
    • P-99 ve L-99 - Prolog ve lisp'te sırasıyla ustalaşmanıza yardımcı olmak için tasarlanmış 99 temel problemin bir seti.
    • 4Clojure - Clojure'a, bir Lisp varyantına özel olarak yönelik bir dizi programlama alıştırması.

    • Diğer:

    • codegolf.stackexchange.com - programlama bulmacalarını yayınlamak ve tartışmak için site
    • Kendi X'inizi oluşturun - yorumlanmış kaynak kodu ile tamamlanmış projeler ve öğreticilerin bir araya getirilmesi

      Görevleri/problemleri programlara dönüştürme konusunda becerimi nasıl geliştirebilirim (Algoritmik düşünme)?

      Bu, en sık sorulan sorulardan biridir.

Genel cevap şudur: Bir sürü program yazarak.

Ancak, bu beceriyi geliştirmenize yardımcı olabilecek basit bir egzersiz var:

  • Her gün yaptığınız, kahvaltı yapmak veya benzeri bir şey gibi bir etkinlik seçin. Çok kolay olmamalı, ancak çok zor da olmamalıdır.
  • Etkinlik için yapmanız gereken adımları yazın, ancak etkinliği gerçekte gerçekleştirdiğiniz zamandan farklı bir zamanda hafızadan yazın. (Kahvaltı yapmanız gereken adımları öğleden sonra yazın.)
  • Bir sonraki sefer etkinliği gerçekleştirirken notlarınızı alın ve adımları harfiyen takip etmeye çalışın. Yazılı adımlardan sapmamaya çalışın ve sapmanız gerekiyorsa, farklılıkları not edin.
  • Algoritmanızı tatmin edene kadar iyileştirin.
  • Farklı etkinliklerle deneyin. Görevler daha kolay ve daha kolay hale geliyor.

Ne kadar aptalca görünse de işe yarıyor. Yukarıdakiler birçok öğrenci üzerinde denenmiş ve önemli bir gelişme sağladığı kanıtlanmıştır.

Proje için hiçbir yeni fikir bulamıyorum. Sadece yaratıcılık eksikliğim mi var? Diğer programcılar nasıl ilham alıyor?

Öncelikle, Chuck Close tarafından (ilham beklememekle ilgili) iyi bir alıntı:

> Genç sanatçılara veya beni dinleyecek herkese vermek istediğim tavsiye, ilham beklememeleridir. İlham amatörler içindir; geri kalanımız sadece gelir ve işe koyuluruz. Bulutların ayrılmasını ve beyninize bir yıldırım düşmesini beklerseniz, pek fazla iş yapmazsınız. En iyi fikirler süreçten çıkar; işin kendisinden çıkar. Aklınıza şeyler gelir. Eğer harika bir sanat fikri hayal etmeye oturmuşsanız, bir şey olmadan önce çok uzun süre orada oturabilirsiniz. Ama sadece işe koyulursanız, aklınıza bir şey gelir ve bir şey daha gelir ve reddettiğiniz başka bir şey sizi başka bir yöne iter. İlham kesinlikle gereksizdir ve bir şekilde aldatıcıdır. İşe koyulmadan önce bu harika fikre ihtiyacınız olduğunu düşünüyorsunuz ve bunun neredeyse hiç olmadığını görüyorum.

Nadiren sadece oturup ilham kıvılcımı beklediğinizde fikir edinebilirsiniz. Zamanınızı, fikir biraz aptalca veya zaten yapılmış görünse bile, bir şey (herhangi bir şey!) inşa etmeye çalışarak harcarsanız, zamanınız çok daha iyi geçecektir.

Sonuçta, sanatçılar ve müzisyenler de bunu yapıyor - mutlaka çok yaratıcı bir çizimle başlamaya veya kendi müziklerini bestelemeye çalışmıyorlar. Bunun yerine, manzaralar veya vazolar çizerler veya mevcut şarkıları kopyalarlar. Benzer şekilde, proje fikirleri bulurken zorunlu hissetmeyin. Mevcut programları yeniden uygulama, zamanla test edilmiş bir gelenektir - ne kadar ileri gidebileceğinizi görün!

Ancak her durumda, kendi projelerinizi bulmak için başka fikirler ve püf noktaları şunlardır:

  • Mevcut bir projeyi yeniden uygulamaya çalışın. Yeni başlayan müzisyenlerin başkalarının yazdığı şarkıları kopyalamaya başlamaları gibi, başkalarının yaptığı programları yeniden uygulamaya çalışmak iyi olabilir. Örneğin, 2D arcade oyunları popüler bir seçimdir - \"Pong\" veya \"Space Invaders\" gibi oyunlar yeni başlayanlar tarafından yapılabilir ve yine de size çok şey öğretecektir. SSS'de daha fazla proje fikrine bağlantılar bulunmaktadır.
  • Programlamayı başka bir hobinizle bağlamaya çalışın. Programlama, bilgisayar bilimiyle hiç ilgisi olmayan çok çeşitli alanlara uygulayabileceğiniz çok faydalı bir beceridir. Örneğin, siyasetle ilgileniyorsanız, oylama havuzlarını ve eğilimleri analiz etmeyi deneyebilirsiniz, müzikle ilgileniyorsanız, dijital bir ses kartı yazmayı deneyebilirsiniz, sporla ilgileniyorsanız, bir fantezi futbol izleyici veya tahminci yazmayı deneyebilirsiniz, bir işletmeniz varsa, envanterinizi takip etmenize yardımcı olacak bir şey yazabilirsiniz... Bilgisayar bilimi dışında ilgi alanlarına sahip olmak burada faydalıdır.
  • Sizi sinirlendiren şeyleri takip etmeyi deneyin. Yaşamınızda yapmaktan hoşlanmadığınız veya tekrarlayan bulduğunuz herhangi bir şey varsa, kendinize bunu otomatikleştirebileceğiniz bir şey olup olmadığını sorun. Bilgisayarların hangi şeyleri otomatikleştirebileceği konusunda bir fikir edinmek için Sıkıcı Şeyleri Otomatikleştirin bölümüne bakın. Bu kılavuz Python kullanıyor, ancak bahsettiği tüm şeyleri herhangi bir programlama dilini kullanarak yapabilirsiniz. Ya da belki de daha fazla fiziksel çözüm için \"ev otomasyon öğretici\" diye google'da aramayı deneyin.

İyi kod ve çalışılacak projeler örneklerini nereden bulabilirim?

Başlamadan önce, lütfen mevcut kodu incelemenin programlamayı öğrenmenin en iyi yolu olmadığını göz önünde bulundurun. Programlama, sonuçta, uygulamalı problem çözmeyle ilgilidir ve problem çözmede daha iyi olmanın en iyi yolu çok fazla pratik yapmaktır. Mevcut kod parçacıklarını sadece okumak size pek bir şey öğretmeyecektir. Genellikle, insanlar kod incelerken, bunu hedefli ve özel bir şekilde yaparlar. Örneğin, bir geliştirici bir oyun motorunu kullanarak bir oyun yazmakla ilgileniyorsa, o motoru kullanan çeşitli demoların kaynak kodunu görmek yardımcı olur.

Her durumda, Github'daki Showcases bölümüne göz atmayı deneyin. Kütüphanelerden ve oyunlardan müziğe ve açık gazeteciliğe/veri analizine kadar uzanan bir sürü popüler ve ilgi çekici açık kaynaklı programın derlenmiş bir listesi vardır ve insanların kodla ne tür şeyler yaptığına dair iyi bir vitrindir. Kaynak kodu ayrıca herkes tarafından görülebilir, bu nedenle bu projeleri kendiniz indirip deneyebilirsiniz.

Ayrıca, popüler açık kaynaklı programların nasıl yapılandırıldığına dair daha fazla rehberli açıklama içeren bir dizi ücretsiz e-kitap olan The Architecture of Open Source Programs'a da bakın. Serinin son kitabı olan \"500 satır veya daha az\" iyi bir başlangıç ​​noktası olabilir, çünkü programlar kendiniz kolayca kurcalayabileceğiniz ve kendi projenizi başlatmak için iyi bir başlangıç ​​noktası olarak kullanabileceğiniz kadar küçüktür.

Tipik bir bilgisayar bilimi derecesinin kapsadığı konuları nasıl öğrenebilirim?

Üniversite veya kolej düzeyindeki çoğu standart bilgisayar bilimi programının kapsadığı materyalleri kendi kendinize öğrenmekle ilgileniyorsanız, aşağıdaki bağlantılar ek öğrenme kaynaklarına bağlantılar içeren iyi bir genel bakış sunar:

  • Her bilgisayar bilimi anadal öğrencisinin bilmesi gerekenler - Matt Might

    Yüksek bir seviyede farklı alanlara genel bakış ve daha da önemlisi, neden değerli oldukları. Ayrıca bazı okuma önerileri içerir.

    Her konu için çoğunlukla Coursera kurslarına bağlantılar içeren daha somut bir yol haritası sunar.

    Önceki kaynağa benzer, ancak hem kitaplar hem de video dersleri için önerileri birleştirir. Üst düzey öneriler çoğunlukla sistemlere (örneğin işletim sistemleri, veritabanları...) odaklanır.

    Bu kaynak biraz alışılmadık ve bilgisayar bilimini öğrenmek için ayrık matematik, fonksiyonel programlama, yazılım doğrulaması, kanıtlar, tür teorisi ve karmaşıklık teorisi gibi konulara odaklanan çok daha matematiksel bir yaklaşım öneriyor.

    Lütfen yüksek kaliteli bilgisayar bilimleri derecelerinin çok titiz ve zorlayıcı olma eğiliminde olduğunu unutmayın. Bu yolu takip etmekle ilgileniyorsanız, kendi kendinize eğitim yoluyla benzer bir eğitim düzeyine ulaşmanız muhtemelen birkaç yılınızı ve çok fazla sıkı çalışmanızı alacaktır.

Büyük bir projeye nasıl başlar ve bitiririm?

Öncelikle: sorunu tam ve kapsamlı bir şekilde anlayın.

Genellikle, Lastik Ördek Hata Ayıklama bu adımda yardımcı olur. Sıfır bilgisi veya anlayışı olan birine (veya bir şeye) bir sorunu veya kavramı açıklamak, sorun hakkında daha derin bir anlayış kazanmaya yardımcı olur. Bunu yaparak, kişi sorun hakkında çok daha fazla düşünmek zorunda kalır ve bu da daha derin bir anlayışa yol açar.

İkincisi: Doğrudan bilgisayara gitmeyin!

Sorun/görev hakkında düşünmek için önemli miktarda zaman harcayın. Bazı eskizler, çizimler, biraz sözde kod, biraz sade dil ipuçları, kağıt üzerinde yardımcı olabilecek her şeyi oluşturun (Bunu burada vurguluyorum çünkü dijital araçlar gerçek işten dikkat dağıtır - yalnızca kalem ve kağıt veya beyaz tahta kullanın.) Sorunu iyice analiz edin.

Bu bizi şuraya götürür.

Büyük projeleri tek başınıza ele alırken bir şeyi unutmayın:

> Dünyadaki her şey daha küçük parçalardan oluşur.

Bu, temelde baktığınız büyük makine, ev, gökdelen, araba, tren, bilgisayar vb. her ne olursa olsun, bir araya geldiklerinde nihai ürünü oluşturan birçok küçük yapıdan oluştuğu anlamına gelir. Daha küçük yapılar daha küçük yapılardan oluşur ve bu böyle devam eder.

Aynı şey büyük programlar için de geçerlidir. Bütünü oluşturmak üzere bir araya getirilen birçok küçük birimden oluşurlar. İdeal olarak (ancak çoğu zaman mümkün olmaz) her küçük birim diğerlerinden bağımsız olarak çalışmalı (ve test edilmelidir).

Küçük başlayın. Seçtiğiniz soruna bakın ve onu daha küçük parçalara ayırmaya çalışın. Daha fazla parçalayamayacağınızı düşünene kadar durulayın ve tekrarlayın.

Bu noktaya ulaştığınızda programlamaya başlayın. Küçük bir parça oluşturun, test edin. Bir sonraki küçük parçayı oluşturun, test edin, vb.

Son, büyük resme bakmayın, çünkü bu sizi bunaltacaktır. Bir seferde tek bir parçayı ele alın.

Deneyimsiz programcıların karşılaştığı en büyük sorun, çoğunlukla büyük bir göreve baktıklarında bunalmış olmalarıdır. Ancak bu sorunun üstesinden gelmek çok da zor değildir:

Son programı tüm ayrıntılarıyla görmeye çalışmayın. Küçük, yönetilebilir bir parçaya odaklanın, onu tamamlayın ve devam edin. En karmaşık program/sistem bile küçük, basit parçalardan oluşur.

Bununla nasıl başa çıkabilirim?

Bir müşteri için çalıştığınızı ve müşterinin kodlamaya başlamadan önce tasarımınızı görüp onaylaması gerektiğini düşünün; çünkü bir yorumları olabilir veya sizinle aralarındaki iletişimin işe yaradığından ve gereksinimlerini anladığınızdan emin olmak isteyebilirler.

  • Projenizin ayrıntılı bir açıklamasını, sözde bir \"işlevsel tasarım spesifikasyonu\" hazırlayın.
  • Bu işlevsel tasarım spesifikasyonunu hayali müşterinizle görüşün (yani bunu cansız bir nesneye veya bunu kaldırabilecek biri varsa ona açıklayın).
  • İşlevsel tasarım spesifikasyonunu iyileştirin - yukarıdaki adıma geri dönün - memnun kalana kadar döngüye alın.
  • Sabit (gerçekçi) bir son tarih içeren bir proje takvimi hazırlayın.
  • Yukarıdakilere sadık kalın (aksi takdirde hayali müşteri oldukça yüksek olabilecek gecikme ücretleri talep eder. pahalı)

Bazı ek tavsiyeler:

  • İlk başta, kodu tamamen unutun ve programı tamamen kullanıcının bakış açısından hayal edin.
  • Yazılımın yapmasını istediğiniz özelliklerin bir listesini yazın.
  • Yazılımın SAHİP OLMAYACAĞI özelliklerin bir listesini yazın. (Bu, \"Bunu yapabilseydi harika olurdu...\" ile özellik kaymasını önleyecektir. Programların çok büyümesi, insanların onları terk etmesinin ana nedenidir.
    er birkaç hafta.)
  • Kullanıcının hangi ekranları göreceğini ve iş akışlarını gösteren birkaç çizim yazın. Bunlar planlar veya nasıl görüneceklerini göstermek için değil, daha çok \"önce kullanıcı bu sayfada, sonra bu sayfaya gidebilir\" içindir. Taslak olarak çizmek, büyük şeyleri unutmamanıza yardımcı olur.
  • Git'i nasıl kullanacağınızı öğrenin ve bir github hesabı edinin. Yedekleme ve ayrıca kod incelemeleri istemek için harikadır. (Kod stiliyle ilgili yorum yapanları görmezden gelin, %99'u verimsiz bir tartışmadır.)

Yaygın endişeler ve korkular

Kod yazmak için çok mu yaşlıyım?

Hayır, her yaşta programlamayı öğrenebilir ve muhtemelen bunu yaparak bir kariyer yapabilirsiniz.

Programlamada iyi olmanın tek yolunun erken yaşta kodlamayı öğrenmek olduğu yönünde yaygın bir efsane vardır. Bu yanlıştır -- erken yaşta kodlamayı öğrenmeye başlayan bazı kişiler olsa da (ve böylece biraz daha önde olabilirler), çoğu kişi üniversiteye girdiğinde veya daha sonra kodlamayı öğrenmeye başlar.

Öğrenmek her yaşta yapabileceğiniz bir şeydir -- başkalarına odaklanmak yerine, sadece kendinize ve kişisel ilerleme hızınıza odaklanın. \"Sabit bir zihniyet\" yerine \"büyüme zihniyeti\" geliştirmeye çalışın.

Önce öğrenmem gereken bir şey var mı?

Çok az ön koşul var -- çoğunlukla, doğrudan kodlamayı öğrenmeye başlayabilirsiniz.

Tek gerçek ön koşullar şunlardır:

  • Yazmayı bilmek (Scratch gibi sürükle ve bırak dilini kullanmıyorsanız)
  • Bir bilgisayara sahip olmak
  • Cevapları bağımsız olarak Google'da aramayı/aramayı bilmek

Ayrıca, biraz matematik (temel cebir seviyesine kadar) ve İngilizce (çünkü çevrimiçi kaynakların çoğu İngilizce) biliyorsanız bu da yardımcı olur, ancak ikisi de gerekli değildir.

Üniversitede resmi bir derece almak istiyorsanız yukarıdakilerin hepsi az çok doğrudur. Çoğu üniversite ve kolej, gelen öğrencilerin bilgisayar bilimi ve programlama hakkında hiçbir şey bilmemesini bekler ve size sıfırdan öğreterek başlar (ancak bazı durumlarda, bir testi geçerseniz veya yeterli ön beceri gösterirseniz bir veya iki giriş dersini atlayabilirsiniz). Lisede veya daha erken bir dönemdeyseniz ve üniversitede bilgisayar bilimi okumak istiyorsanız, bir adım önde olmak için önceden çalışmaya başlamak iyi olabilir, ancak bunu yapmak zorunda hissetmemelisiniz.

Bazı kolejlerde daha katı genel eğitim veya matematik ön koşulları da olabilir (örneğin, çoğu kolejde ön koşul olarak kalkülüs vardır), ancak bu kolejden koleje değişecektir ve doğrudan araştırmanız ve katılmak istediğiniz kolej ve üniversitelere sormanız gereken bir konudur. Daha fazla ayrıntı için aşağıya bakın.

Matematikte iyi olmak zorunda mıyım?

Mutlaka değil - programlama ve bilgisayar bilimi geniş ve kapsamlı bir alandır ve matematikte iyi olmanız gerekip gerekmediği hangi disiplinde uzmanlaşmayı seçtiğinize bağlıdır.

Örneğin, bazı programlama disiplinleri güçlü matematik becerileri gerektirir. 2B ve 3B oyunlar vektörleri, matrisleri ve doğrusal cebiri sık sık kullanır; veri analizi ve makine öğrenimi istatistik ve kalkülüsten birçok kavramdan yararlanır; ve cebir ve temel kalkülüs konusunda iyi bir kavrayışınız varsa algoritmik karmaşıklığı çözmek daha kolaydır.

Genel olarak, konu ne kadar ileri ve karmaşıksa, güçlü bir matematiksel temele sahip olmanız o kadar olasıdır. Amacınız bu tür karmaşık problemler üzerinde çalışabilmekse, o zaman iyi bir temele sahip olmak paha biçilmez olacaktır.

Ancak, bilgisayar bilimi ve programlamanın birçok yönü matematiğin iyi anlaşılmasını gerektirmez. Gerçekten bilmeniz gereken tek şeyler toplama, çıkarma, çarpma ve bölme ve belki biraz temel cebirdir. Birçok programcı, kariyerinin tamamını neredeyse hiç matematik yapmadan geçirir.

Özellikle, ürün odaklı birçok rol (ör. web geliştirme, mobil geliştirme) çok az matematik bilgisi gerektirir. Bu alt disiplinlerde en önemli şey, sağlam ve sürdürülebilir kod yazma becerinizin yanı sıra kullanıcılarınız için değerli olan şeyleri nasıl inşa edeceğinizi anlama becerinizdir.

Her durumda, matematikte çok iyi değilseniz, kesinlikle öğrenebilir ve gelişebilirsiniz! Sonuçta, muhtemelen programlamada da henüz çok iyi değilsinizdir, ancak işte buradasınız, kodlamayı öğreniyorsunuz. Khan Academy'a göz atın ve temel matematikten başlayarak ücretsiz dersler bulabilirsiniz. Ayrıca daha fazla kaynak için /r/learnmath'e bakın.

Ancak, Bilgisayar Bilimi'nde derece almakla ilgileniyorsanız cevabın biraz farklı olduğunu unutmayın. Birçok üniversite veya kolej, ana dala girmeden veya mezun olmadan önce yerine getirmeniz gereken belirli ön koşullara sahip olacaktır (hesap dersleri, vb.). Ve Bilgisayar Bilimi, bir dereceye kadar uygulamalı matematik, derecenizi alırken neredeyse kesinlikle ayrık matematik, kanıt yazma ve diğer benzer konuları öğreneceksiniz. Bu konuları (veya herhangi bir matematik konusunu) öğrenmek için matematikte doğuştan iyi olmanız gerekmez, ancak biraz matematiksel olgunluğa sahip olmak kesinlikle zarar vermez ve muhtemelen öğrenme sürecini kolaylaştırır.

Bir bilgisayar bilimleri derecesinin tam olarak ne kadar matematiğe odaklı olacağı okuldan okula farklılık gösterir. Bazı okullar teoriyi kapsamaya büyük önem verirken, diğerleri uygulamaya odaklanmak adına her ikisini de önemsemez. (Ve bazı okullar her ikisini de vurgular). Daha fazla bilgi edinmek istiyorsanız, katılmak istediğiniz kolej veya üniversitelerin derece gereksinimlerini ve yapısını doğrudan araştırmalısınız. Belirli bir üniversitenin hangi yöne kayacağını kolayca tahmin edemeyiz.

Özetle, bir geliştirici olarak başarılı bir kariyer istiyorsanız, matematiğe iyi hakim olmanız gerekmez. Bilgisayar bilimcisi olmak istiyorsanız, oldukça fazla matematik öğreneceksiniz. Daha zor problemler/belirli alanlar üzerinde çalışmak istiyorsanız, duruma bağlı olarak matematik faydalı bir araç olabilir.

Çok fazla Google arıyorum veya başlamadan önce bir şeyi nasıl tamamlayacağımı bilmiyorum. Bu sorun olur mu?

EVET. Burada konuyu çeşitli açılardan ele alan bir konu başlığı bulunmaktadır. Buna benzer daha birçok şey var.

Programlama zor mudur?

Programlama çoğu beceri gibidir: temelleri öğrenmek ve uygulamak nispeten kolaydır. Bowling oynamayı öğrenmek istiyorsanız - parmaklarınızı deliklere nasıl sokacağınızı ve genel olarak pinlerin yönüne doğru nasıl fırlatacağınızı anlayacaksınız. Hatta birkaçını devirebilir ve bunu özellikle zor bulmayabilirsiniz.

Programlama da çoğu beceri gibidir çünkü yeni başlayan birinden belli bir beceri seviyesine sahip birine dönüşmek çok daha fazla şey gerektirir. Bowling benzetmesini sürdürürsek: Eğer yarışmacı bir bowling oyuncusu olmak istiyorsanız, beceride ustalaşmak için yıllar harcamanız gerekecektir. Aynısı kodlama için de geçerlidir: Bu aptal programın üç kez kontrol ettiğinizde bile neden çalışmadığını anlamaya çalışarak biraz (yani çok) zaman harcamanız gerekecektir. Kitap okumanız, derslere katılmanız ve insanlarla bunun hakkında konuşmanız gerekecek. Jargonu öğreneceksiniz. Ayrıca uzmanlaşacaksınız - birkaç küçük alan hakkında gerçekten derinlemesine bilgi edineceksiniz. Tüm bunlar hala programlamanın temellerini kullanıyor, ancak yeni yollarla ve yeni kombinasyonlarla. Sorunlarınıza çözümler bulmak zor olacak. Aynı soruna saatlerce odaklanmak zor olacak. Sorun değil, çünkü bundan zevk alıyorsanız ve motiveyseniz - zor kısımlar o kadar zor gelmez ve bunların üstesinden gelebilirsiniz.

Özetle, programlama zor olabilir. Çoğu şeyde olduğu gibi, çaba gerektirir ve bu çaba zor olabilir. Cesaretiniz kırılmasın - eğer bundan zevk alıyorsanız, zor kısımlar ödüle değer olacaktır.

Yeni başlayan birinin problemlerde ve egzersizlerde biraz sorun yaşaması normal midir?

Yeni başlayan birinin birkaç kez bisikletten düşmesi normal midir? Yeni başlayan birinin yüzmeyi öğrenirken birkaç kez batması normal midir? Yeni başlayan birinin bir enstrüman öğrenirken notaları kaçırması veya yanlış notalar çalması normal midir? Yeni başlayan birinin birkaç öğünü yakması normal midir? Yeni başlayan birinin spor salonunda egzersiz yaparken tekrarlarını tamamlamakta zorlanması normal midir?

Kesinlikle evet!

Başarısızlık ve mücadele, öğrenme sürecinin çok önemli ve doğal bir parçasıdır. Başarısızlık size bir şeyleri yapmamayı öğretir ve bir şeyi ne kadar iyi anladığınıza dair değerli geri bildirimler verir. Başarısızlık, kazanılan deneyim için kullanılan başka bir kelimedir.

Başarısızlık ve mücadele, her yeni başlayanın yaşadığı bir şeydir: Mücadele etmeniz gerekir. Bu yüzden cesaretiniz kırılmak yerine bunu benimsemelisiniz: Mücadele, kendinize meydan okuduğunuzun bir işaretidir. Bunu, hangi materyali gözden geçirmeniz ve öğrenmeniz gerektiğini veya hangi soruları sormanız gerektiğini anlamanıza yardımcı olacak bir kılavuz olarak kullanın.

Uzmanlar bile yeni materyal öğrenmeleri gerektiğinde başarısız olur ve zorlanırlar (ancak öğrenmelerini hızlandırmak için başarısızlığı bir yol olarak kullanmada/kurtulmada daha iyi olma eğilimindedirler).

Aslında, eğer zorlanmıyorsanız, bu neredeyse kesinlikle bir şeyleri yanlış yaptığınızın bir işaretidir. Her şey kolaysa, bu şu anlama gelir:

  1. Kendinizi zorlamıyorsunuz
  2. Gerçekten yeni bir şey öğrenmek için kendinizi zorlamıyorsunuz
  3. Materyali uygulamaya çalışarak gerçekten anladığınızdan emin olmak için kendinizi zorlamıyorsunuz

Egzersize benzer. Antrenmandan sonra fiziksel olarak yorgun hissetmiyorsanız, egzersizden gerçekten çok şey kazandınız mı? Benzer şekilde, zihinsel olarak yorgun veya zihinsel olaraklly bazı kodlama zorlukları üzerinde çalıştıktan sonra meydan okundu, gerçekten bir şey öğrendin mi?

Programlama motivasyonumu kaybettim/Motivasyonumu korumak zor

Motivasyona güvenirseniz, başarısız olursunuz. Garantili. Disiplin ve rutine güvenmeniz gerekir.

Bir rutin oluşturmayı ve disiplin uygulamayı başarırsanız, becerilerinizi geliştirirsiniz ve bu da sizi devam etmeye motive eder.

Lütfen bu makaleyi ve bağlantılı sayfanın altındaki ikinci bölümü okuyun. İkinci bölüm size yardımcı olacak bazı \"zihin tüyoları\" sunuyor.

Kısacası (ve makaleden alıntılanmıştır): antrenmana başlamak için Olimpiyat formuna gelmeyi beklemezsiniz. Olimpiyat formuna girmek için antrenman yaparsınız.

Bir \"hayat tüyosu\" daha: Devam etmenizi sağlayacak Jerry Seinfeld'in \"Zinciri Kırma\" yöntemini kullanın.


Öğrenmeyle ilgili sorular

\"Bir dili bilmek\" veya \"programlamayı bilmek\" ne anlama gelir?

Programlama için \"bir dili bilmek\", konuşmak için bir dili bilmeye benzer. Hakkında \"her şeyi\" bilmeseniz bile, onu etkili bir şekilde kullanabildiğinizde bildiğinizi söyleyebilirsiniz. \"Programlamayı bilmek\" genellikle programlamayla ilgili kavramları anladığınız ve bunları bir veya daha fazla dilde etkili bir şekilde kullanabildiğiniz anlamına gelir. Konuyla ilgili geçmiş konuları okuyun.

X dilini öğrenmeye yeni başladım. Y dilini öğrenmeye başlamalı mıyım?

Özellikle programlamayı öğrenmeye başladığınızda, bir dili öğrenmek ve bir süre onunla devam etmek en iyisidir. Belirli bir problem alanı henüz bilmediğiniz belirli bir dil kullanıyor olsa bile, önce programlamayı öğrenin. Temelleri (akış kontrolü, hata işleme, G/Ç, algoritmaların uygulanması, veri yapıları, vb.) anladıktan sonra, farklı dilleri öğrenmek konusunda endişelenmeye başlayabilirsiniz.

Aynı anda birden fazla programlama dili öğrenmeli miyim?

İyi bir nedeniniz yoksa, çoğu yeni başlayan en azından birkaç ay boyunca tek bir dilde ilerlemelidir. Bu, birkaç nedenden dolayı öğrenmek için daha etkili bir yoldur:

  1. Çoğu dilin temelleri oldukça benzerdir. Örneğin, çoğu dil if ifadelerini hemen hemen aynı şekilde ele alır. Temelde aynı materyalin iki çeşidini öğrenmeye zaman harcamak, zamanın iyi bir kullanımı değildir ve yeni başlayanlar için kafa karıştırıcı olabilir.
  2. Programlamayı öğrenmenin en zor kısmı, bir programlama dilinin nasıl çalıştığını öğrenmek değildir: kodla problemleri çözmeyi öğrenmektir. Bu nedenle, dil özelindeki ayrıntıları öğrenmek/diller arasındaki farkları takip etmek için beyin gücü harcamak yerine, kodla problem çözme pratiği yapmaya harcadığınız zamanı en üst düzeye çıkarmak istersiniz.
  3. İlkinde yeterlilik kazanıp güçlü problem çözme becerileri edindikten sonra ikinci bir dili öğrenmek çok daha kolaydır.

Bu kılavuzun bazı istisnaları vardır. Aşağıdaki durumlarda birinci dilinizin yanında ikinci bir dil öğrenmek sorun değildir:

  1. ...ikinci dil bir programlama dili değilse. Örneğin, bir programlama dili (örneğin C, C++, C#, Java, JavaScript, Python, Ruby) ile birlikte işaretleme dilleri (örneğin HTML veya CSS) öğrenmek sorun olmaz.
  2. ...üzerinde çalışmak istediğiniz proje türleri için gereklidir. Öğrenmeye devam etmek için kendinizi motive etmeniz önemlidir ve bu aynı anda iki programlama dili öğrenmek anlamına geliyorsa, öyle olsun.
  3. ...sizi yönlendirecek özel bir öğretmeniniz veya akıl hocanız varsa. Yetenekli öğretmenler ve akıl hocaları, öğrenme sürecinizi büyük ölçüde kolaylaştırmaya yardımcı olabilir ve bu da verimsizliği fazlasıyla telafi eder.

Kendinizi yeni başlayan biri olarak görmüyorsanız ve programlama dilinizi orta düzeyde karmaşık projeleri tamamlamak için kullanmaktan rahat hissediyorsanız, elbette birden fazla dili aynı anda öğrenmeyi deneyebilirsiniz. Bu noktada, yeni dilleri hızla öğrenmeye başlamak için programlama hakkında yeterli anlayışa sahip olmalı ve aynı anda ne kadar öğrenebileceğinize dair iyi bir fikre sahip olmalısınız.

Programlamayı öğrenmek için nasıl motive olabilirim/motivasyonumu nasıl koruyabilirim?

/r/GetMotivated/ ve /r/GetDisciplined'a göz atın

Genellikle \"yeterince motive olsaydım... o zaman... yapabilirdim,\" diye düşünürüz; ancak; motivasyonu sağlayan şey eylemdir. Önce eylem, sonra motivasyon gelir. Oluşturmak için küçük, belirli programlar bulun. Dikkat dağıtıcı şeylerden kurtulun. Reddit, Facebook ve Twitter gibi web sitelerini engellemek için tarayıcı eklentileri edinin. Daha bilgili bir programcı olduğunuzda ne kadar harika hissedeceğinizi hayal etmek için bir dakikanızı ayırın.

Bu konu hakkında geçmişteki bazı başlıklar şunlardır:


X'te nasıl başlarım?

Video oyunları yapmaya nasıl başlayabilirim?

Modern video oyunları oyun motorları kullanılarak yapılır: grafikler, ses, fizik ve ağ oluşturma gibi karmaşık görevleri işleyen yazılım kütüphaneleri. Birçok seçenek mevcut - Ancak, aşağıdaki motorlar, geliştirmenin ücretsiz olması ve öğrenme için en iyi belgelere sahip olması nedeniyle yeni başlayanlar için şiddetle tavsiye edilir:

  • Unity (C#): 2D ve 3D mobil, masaüstü, tarayıcı/çevrimiçi ve konsol oyunları
  • Construct2 (JavaScript): 2D mobil, masaüstü, tarayıcı/çevrimiçi için
  • Pygame (Python): 2D masaüstü oyunları için motor
  • LÖVE (LUA): 2D masaüstü oyunları için uygundur
  • GODOT: Özellikle yeni başlayanlara uygun olduğu söylenen bir oyun motoru

Her zaman şunu unutmayın ki hedefiniz oyun geliştirmek, motorlar değil!

Motorlar oyunlarınız için grafikler ve kullanıcı kontrolleri konusunda size yardımcı olacaktır, ancak yine de oyun mantığınızı yazmak için bir programlama dilini iyice öğrenmeniz gerekecektir - bu yüzden iyi bir Kitap veya Çevrimiçi Kaynak seçin.

En önemlisi: Basitten başlayın. Hemen işe koyulup hayalinizdeki oyunu yaratmak isteyeceksiniz, ancak bir dağa tırmanmanın tek yolunun birçok küçük adım atmak olduğunu unutmayın. İşte zorluk derecesine göre artan bir sırayla listelenen basit pratik oyunların bir listesi - doğrudan nihai hedefinize geçmeden önce bunlardan birkaçını denemeyi düşünün:

/r/gamedev SSS'ye göz attığınızdan, /r/gamedev \"Başlarken\" kılavuzunu okuduğunuzdan ve /r/gamedev ve /r/learnprogramming'deki geçmiş konularda bazı aramalar yaptığınızdan emin olun.

Nasıl edinebilirim Web sitesi yapmaya/web uygulamaları yapmaya/web geliştirmeye başladınız mı?

Web geliştirme hakkında bilgi edinmenin birçok farklı yolu vardır, ancak genel olarak ihtiyaç duyduğunuz temel beceriler genellikle ön uç becerileri (bir kullanıcının web tarayıcısında çalışan kod) ve arka uç becerileri (sunucunuzda çalışan kod) olarak ikiye ayrılır.

Genel olarak, çoğu kişi her web tarayıcısında çalışan ve her web sitesini oluşturan üç temel dil olan HTML, CSS ve Javascript'i (bu sırayla) öğrenerek başlamanızı önerecektir.

Daha fazla bilgiyi /r/webdev SSS adresinde bulabilirsiniz. İşte yeni başlayanlar için bir başka çevrimiçi kurslar, öğreticiler ve kaynaklar listesi.

Mobil uygulamalar/Android uygulamaları/iOS uygulamaları/Windows phone uygulamaları yapmaya nasıl başlayabilirim?

Her akıllı telefon türü için farklı bir programlama dili öğrenmeniz gerekecek.

  • Android uygulamaları öncelikle Kotlin veya Java ile kodlanır -- daha fazla bilgi için /r/androiddev'in SSS'sine bakın.
  • iOS uygulamaları Objective-C veya Swift ile kodlanır -- daha fazla bilgi için /r/iosprogramming'in kenar çubuğuna ve wiki'sine (Github'da barındırılır) bakın info.
  • Windows Phone uygulamaları C#, Visual Basic veya Javascript ile kodlanır -- daha fazla bilgi için /r/WPDev kenar çubuğuna bakın.

Ayrıca Phonegap ve Titanium gibi teknolojileri kullanarak üç büyük akıllı telefonun hepsinde çalışabilen uygulamalar da yapabilirsiniz -- bunlar, HTML, CSS ve Javascript kullanarak uygulamanızı bir kez yazmanıza ve uygulamanızıherhangi bir platform.

Daha fazla bilgi için mobil uygulama geliştirme kaynakları listesine bakın. Konuyla ilgili geçmiş bir konu başlığı şu şekildedir: http://redd.it/352f09

Ancak, yukarıdaki kaynakların çoğunun, hatta tamamının, daha önce programlama deneyimi olan kişilere yönelik olduğunu unutmayın. Daha önce hiç programlama yapmadıysanız, yeni başlayanlara yönelik daha fazla kaynağa sahip bir dil öğrenmeye başlamak isteyebilirsiniz. Biraz deneyim kazandıktan ve programlamanın ardındaki temel kavramları öğrendikten sonra, genellikle yeni bir dil öğrenmenin ve mobil geliştirme hakkında bilgi edinmeye başlamanın çok daha kolay olduğunu göreceksiniz. SSS'mizdeki Başlarken bölümünde nereden başlayacağınız hakkında daha fazla bilgi bulabilirsiniz.

İşleri nasıl otomatikleştiririm?

Windows için Autohotkey ve AutoIt gibi birkaç özel programlama dili vardır.

Bir diğer uygulanabilir, platformlar arası alternatif Python'dur. Sıkıcı İşleri Python ile Otomatikleştirin harika bir öğrenme kaynağıdır.

MS-Office'i otomatikleştirmek istiyorsanız, yerleşik programlama dili Visual Basic for Applications (VBA)'yı kullanın. /r/vba, VBA programlamaya ayrılmıştır.


En iyileri nelerdir...

/u/thekodols, bu gönderide çeşitli dilleri, araçları ve konuları kapsayan 150'den fazla \"en iyileri nelerdir\" sorusu ve cevabı derledi


Terminoloji ve Kelime Dağarcığı

Bilgisayar bilimi, bilgisayar mühendisliği, yazılım mühendisliği, programlama ve kodlama arasındaki fark nedir?

CS/CE/SE ile Programlama/Kodlama

Bilgisayar bilimi (CS), bilgisayar mühendisliği (CE), yazılım mühendisliği (SE), programlama ve kodlama, birbirleriyle ilişkili ancak birbirlerinden ince bir şekilde farklı olan terimlerdir ve bu da yeni başlayanların bunları birbirinden ayırt etmesini zorlaştırır.

Yapmanız gereken ilk ayrım, CS/CE/SE ile programlama/kodlama arasında ayrım yapmaktır. CS, CE ve SE hepsi çalışma alanlarıdır. \"Bilgisayar bilimi okuyorum\" demek, \"Kimya okuyorum\" veya \"Edebiyat okuyorum\" demeye benzer. Buna karşılık, programlama ve kodlama etkinliklerdir -- yaptığınız şeylerdir. Bir metafor kullanmak gerekirse, CS/CE/SE çalışmak müzik teorisi çalışmaya benzerken, programlama/kodlama öğrenmek belirli bir enstrümanı çalmayı öğrenmeye benzer.

Teorik olarak birini öğrenebilir ve diğerini öğrenemeyebilirsiniz, ancak her ikisini de öğrenirseniz deneyiminiz çok daha zenginleşecektir.

Bir diğer fark da, CS/CE/SE çalışabileceğiniz şeylerken, programlamayı öğrenmenin yalnızca pratik yaparak elde edilen bir şey olmasıdır. Ve aslında, çoğu üniversite ve okulun yapacağı şey, kodlamanın temellerini öğretmek için resmi olarak bir dil öğretmek, ardından CS, CE ve SE öğretmeye odaklanmak ve size ödevleri uygulayarak ve tamamlayarak programlamayı öğrenmeyi bırakmaktır.

CS vs CE vs SE

Yapmanız gereken bir sonraki ayrım CS, CE ve SE arasındadır. Özetle, çok fazla örtüşme olmasına rağmen, \"bilgisayar bilimi\"nin bilgisayarlarla veya bilimle pek ilgisi yoktur ve daha çok hesaplanabilirlik kavramını inceleyen bir uygulamalı matematik alanıdır. Bilgisayar mühendisliği CS'ye benzer, ancak daha düşük seviyeli donanıma odaklanma eğilimindedir -- bilgisayar bilimi ile elektrik mühendisliğinin bir karışımı gibidir. Ve son olarak, yazılım mühendisliği daha çok büyük ve karmaşık programların kendi ağırlıkları altında çökmesini önlerken nasıl oluşturulacağıyla ilgilidir -- CS ve CE gibidir, ancak daha az teori içerir.

Daha ayrıntılı bir genel bakışı burada bulabilirsiniz: http://www.reddit.com/r/learnprogramming/comments/2k569h/eli5_computer_science_vs_software_engineering_vs/

Programlama ve Kodlama

Ve son olarak, programlama ve kodlama vardır. Bu iki terim arasındaki fark çok küçüktür -- birçok kişi bunları birbirinin yerine kullanır. Genel olarak, \"programlama\" terimi \"kodlama\" teriminden biraz daha olumlu çağrışımlara sahip gibi görünmektedir. \"Ben bir programcıyım\" derseniz, bu belirli bir profesyonellik seviyesini ima eder -- yalnızca kod yazabildiğinizi değil, aynı zamanda temeller ve teori hakkında sağlam bir kavrayışa sahip olduğunuzu, müşterilerle nasıl iletişim kuracağınızı ve başkalarıyla nasıl çalışacağınızı bildiğinizi vb. gösterir.

Bunun aksine, \"Ben bir kodlayıcıyım\" derseniz, bu genellikle odak noktanızın yalnızca kod yazmaya, diğer şeylere daha az odaklandığınızı ima eder.

Ancak, yine de, farklı çağrışımlar burada çok küçüktür -- iki terimi çoğu durumda birbirinin yerine kullanabilirsiniz.

C, C++, Objective-C veC\#?

TL;DR - C, C++, Objective-C ve C\# aynı dilin farklı çeşitleri değildir.

C, bu dillerin en küçüğü ve en eskisidir. Başlangıçta Unix işletim sistemi için bir sistem programlama dili olarak yaratılmıştır ve bugün hala uygulama programlama için yaygın olarak kullanılmaktadır.

C++, başlangıçta C'ye dayanan çok popüler, genel amaçlı bir programlama dilidir. Biraz ayarlamayla çoğu C kodu C++ kodu olarak derlenebilir. Ancak C++, dilin kullanım şeklini C'nin kullanım şeklinden önemli ölçüde değiştiren çok sayıda dil özelliği ekler. Genellikle C++'da C tarzı kod yazmak kötü bir uygulama olarak kabul edilir.

Objective-C, C'nin kesin bir üst kümesidir, yani geçerli tüm C kodu aynı zamanda geçerli Objective-C kodudur. Objective-C, C veya C++ kadar popüler değildir ve günümüzde çoğunlukla Apple'ın OS X ve iOS platformları için geliştirmede kullanılır.

C\# herhangi bir teknik anlamda C'ye dayalı değildir. C\# Microsoft tarafından tasarlanmış genel amaçlı bir dildir ve birçok yönden Java'ya benzer. Önceki üç dilin hepsi yerel makine koduna derlenmişken, sanal makinede (CLR) çalışan bir ara forma derlenir. C\# sözdizimsel öğeleri C ve C++'dan ödünç alırken (Java'da olduğu gibi), bu dillerle gerçek bir teknik ilişkisi yoktur.

Java ve JavaScript arasındaki fark nedir?

Java, JavaScript'e, bir üzümün bir greyfurtla ilişkisi gibi benzerdir.

Önceki soruda olduğu gibi, Java ve JavaScript herhangi bir teknik anlamda ilişkili değildir. İkisi de C'den etkilendiği için biraz sözdizimi paylaşırlar, ancak bu kadar. Wikipedia'da isim benzerliğinin neden var olduğuna dair iyi bir açıklama var: Wikipedia: JavaScript ve Java

Sınıflar ve Arayüzler

Bu, sıklıkla karşılaşılan ve dışarıdan bakıldığında her ikisi de benzer şeyler yapıyor gibi göründüğü için yeni başlayanları sıklıkla şaşırtan bir sorudur.

/u/donsagiv harika ve basit bir ELI5 yazdı (orijinal yoruma bağlantısı):

Bir izci, yemek pişirme, yüzme, kamp ateşi yakma, kano yapma vb. gibi belirli şeyleri yapmalarını sağlayan rozetlere sahiptir. İzci birliği, bunları nasıl yapabildiklerini (ör. yüzme) umursamaz kurbağalama, sırtüstü vb.) bunun için gereken şartları karşıladıkları sürece (su üstünde kalırken vücudun belirli ve kontrollü hareketleriyle suda hareket edebilme). Her izci sıfır veya çok sayıda rozet alabilir, yani rozetin hak ettiği her şeyi yapmaya yetkilidirler.

Buna rağmen, onlar hala izcidir. Her izci periyodik toplantılara katılabilir, üniformalarını giyebilir, vb. Bir izcinin yüzmek için rozete ihtiyacı yoktur. Ancak, yüzme rozeti yoksa nehirde rafting yapamazlar. Düzenleme: Yüzme rozeti tek başına yüzemez. Bu, bağlı olduğu izcinin yüzebildiğinin bir göstergesidir.

İzci sınıftır ve yüzme rozeti onun uyguladığı bir arayüzdür.

Sınıfın örneklenen her nesnesi aynı işlevlere sahiptir (ör. periyodik toplantılara katılma, üniforma giyme, vb.). Sınıf bir arayüz uygularsa, sınıf arayüzde belirtilen işlevleri (ör. yüzme, kano) gerçekleştirebilmelidir. Bazı sınıflar, bu arayüzü uygulamadıkları sürece kodunuzun belirli bölümlerinde kullanılamaz (ör. nehirde rafting yapmak için yüzme rozetleri gerekir). Düzenleme: Bir arayüz bir soyutlamadır, bu nedenle örneklenemez. (Bir rozet tek başına yüzemez.) Özetlemek gerekirse, bir arayüz, bir sınıfın onu uygulayabilmesi için uyması gereken bir sözleşmedir.

Arayüzler ve sınıflar farklı dillerde farklı davranır (Örneğim, genel türlerle ilgili C#'ta bildiklerimdendir). Belgeleri kendi dilinizde dikkatlice okumanızı öneririm.

Arayüzler ayrıca farklı sınıflardan nesneler toplamak için de kullanılabilir (bir veri türü gibi davranırlar).

Uyruğu, cinsiyeti, yaşı vb. ne olursa olsun yüzebilen tüm izcileri toplayabilir ve nehirde rafting yapabilirsiniz. İzciler hakkında tek tek hiçbir şey bilmenize gerek yok, ancak her birinin yüzebildiğini biliyorsunuz.


Araçlar ve sürüm denetimi

Buradan başlayın: Bilgisayar Bilimi Eğitiminizin Eksik Yarıyılı

Kaynak/Sürüm/Sürüm Denetimi Nedir? Kullanmalı mıyım?

Bir Sürüm Kontrol Sistemi (VCS), kodunuzdaki değişiklikleri takip eden ve kodlama hatalarını geri alma ve zaman içinde kodda neyin değiştiğini görme gibi kullanışlı şeyler yapmanıza olanak tanıyan bir araçtır. Modern Dağıtılmış Sürüm Kontrol Sistemleri (DVCS) ayrıca aynı kod üzerinde diğer programcılarla kolayca çalışmanıza olanak tanır. Ve evet, kesinlikle bir sürüm kontrol sistemi kullanmalısınız!

En popüler iki DVCS git ve Mercurial'dır;hangisini kullanacağınız çoğunlukla kişisel tercihinize bağlıdır, ancak biz bunlardan birini kullanmanızı şiddetle tavsiye ediyoruz.

Peki sürüm denetimine nasıl başlarım?

Bir reddit kullanıcısı tarafından yazılan bir git kılavuzu ve ayrıca ücretsiz git kitabını okuyarak git ile başlayabilirsiniz.

Mercurial hakkında iyi ve kısa bir eğitim burada bulabilirsiniz.

Her iki yazılım parçası için indirme sitelerine araçlar sayfamızda bağlantılar bulunmaktadır.

Bir IDE mi kullanmalıyım?

IDE, genellikle kod tamamlama ve sözdizimi vurgulama özelliğine sahip bir metin düzenleyici, bazı proje yönetimi özellikleri, bir derleyici veya yorumlayıcı (yapılandırılabilir veya dahil) ve kod yazmayı, çalıştırmayı ve test etmeyi kolaylaştıran birçok başka gösterişli özellik içeren bir GUI uygulaması olan Entegre Geliştirme Ortamıdır. IDE kullanmanın alternatifi, IDE'nin sizin için yaptığını otomatik olarak kendi başınıza yapmaktır. Bu yöntem, programcının ayrı araçlar kullanmasını ve geliştirme süreci hakkında daha derinlemesine bilgi sahibi olmasını gerektirir.

Yeni başlayanlar için, bu geliştirme yöntemlerinin her ikisi için de argümanlar vardır:

  • IDE kullanmak, geliştirme süreci hakkında çok fazla şey bilmenize, bir komut satırı arayüzü kullanmanıza ve bu araçları birlikte doğru şekilde çalışacak şekilde yapılandırmanıza gerek olmadığı anlamına gelir; bir IDE, kodunuzun oluşturulması için hızlı bir yol sunar ve hatta sizin için kodun bir kısmını yazabilir!

  • Öte yandan, komut satırından çalışmak, IDE tasarımcısının zihniyetine uymak zorunda olmadığınız anlamına gelir ve geliştirme sürecinin daha azı sizden gizlendiğinden, yazılım oluşturma süreci hakkında daha iyi bir anlayışa sahip olursunuz.

Bir IDE'nin ayrı araçlara karşı kullanımı genellikle kişisel bir tercih meselesidir (elbette işvereniniz/okulunuz belirli bir geliştirme ortamının kullanımını gerektirmediği sürece). Daha önce hiç IDE kullanmadıysanız, popüler olanlardan birini indirin ve üzerinde oynayın. Ve daha önce hiç vim kullanmadıysanız veya komut satırından kod derlemediyseniz, deneyin ve beğenip beğenmediğinize bakın. Yaygın IDE'lerin ve hafif metin editörlerinin bir listesi Programlama Araçları adresinde bulunabilir.


Bilgisayarlar ve İşletim Sistemleri

Ne tür bir işletim sistemi kullanmalıyım?

Birçok yeni başlayanın sorduğu yaygın soru, ne tür bir işletim sistemi kullanmaları gerektiğidir -- Windows, Mac veya Linux.

Dürüst olmak gerekirse, bu çağda, size sunulan araçların kalitesi ve olgunluğu tüm platformlarda hemen hemen aynı olacak ve herhangi bir iyi programlama dili tüm işletim sistemlerinde kullanılabilir olacaktır.

Bununla birlikte, yeni bir işletim sistemi türüyle karşılaştığınızda (örneğin, başka bir makineye uzaktan bağlandığınızda veya yeni bir işe başladığınızda) tamamen kaybolmamak için sonunda üç işletim sisteminin hepsiyle bir miktar aşinalık kazanmalısınız.

Bu kuralın iki ana istisnası vardır:

  • Windows'a özgü geliştirme yapmak istiyorsanız, bir Windows bilgisayarı edinin.
  • Mac veya iOS'a özgü geliştirme yapmak istiyorsanız, bir Mac edinin.

Diğer platformlarda [C# kodunu çalıştırmak için bir dizi iyi seçenek vardır, ancak bazı Microsoft ve .NET araçları hala öncelikli olarak Windows'a yöneliktir.

Herhangi bir bilgisayarda Mac ve iOS uygulamaları geliştirebilmenize rağmen, bir Uygulamanızı derleyip uygulama mağazasına göndermek için Mac makinesi.

Son olarak, bir işletim sistemi seçtikten sonra \"kilitli\" olmadığınızı da belirtmekte fayda var -- başka bir işletim sistemi yüklü bir sanal makine (VM) çalıştırmak her zaman mümkündür. Örneğin, bir Windows bilgisayarım varsa, mevcut Windows işletim sistemimle çakışma korkusu olmadan kullanabileceğim bir Linux sanal makinesi kurmak çok kolay olurdu.

Ne tür bir bilgisayar/dizüstü bilgisayar almalıyım?

Yine, bunun pek bir önemi yok -- herhangi bir orta sınıf dizüstü bilgisayar veya bilgisayar yeterli olacaktır. Zaten bir bilgisayarınız veya dizüstü bilgisayarınız varsa, yeni bir bilgisayar satın almak yerine onu kullanmalısınız. Temel olarak, programlamayı öğrenebilir ve var olan hemen hemen her bilgisayarda karmaşık ve ilgi çekici programlar yazabilirsiniz.

Temel olarak yoksulsanız ve kullanılabilir bir bilgisayarınız yoksa, Craigslist gibi yerlerde kullanılmış bir bilgisayar arayabilir veya etrafınıza sorabilirsiniz. Sadece öğrenmek içinse eski bir bilgisayarla çok ileri gidebilirsiniz.

Ancak, yeni bir bilgisayar satın almanız gerekiyorsa ve bunu programlama için kullanmak istiyorsanız, CPU, RAM ve sabit disk alanına öncelik vermelisiniz. Mümkünse, aşağıdaki özelliklere sahip veya daha iyi bir bilgisayar edinmeye çalışın:

  • Intel i5 CPU (3.0+ GHz)
  • 8 GB RAM
  • 200 GB sabit disk
  • (İsteğe bağlı) Katı hal sürücüsü

Yükseltme yapabiliyorsanız, daha büyük bir sabit disk almak yerine daha iyi bir CPU ve daha fazla RAM edinmeyi önceliklendirmek muhtemelen güvenlidir -- daha güçlü bir CPU her zaman yardımcı olacaktır. Buna karşılık, çoğu programlama türü çok fazla disk alanına sahip olmanızı gerektirmez: tek istisna, resimler veya videolarla bir şeyler yapmaya çalışıyorsanız veya makine öğrenimi ve benzeri şeyler hakkında bilgi edinirken büyük veri kümelerini indirip analiz etmek istiyorsanız olur (ve eğer buna karar verirseniz, bunları genellikle bulutta depolayabilirsiniz).

Bir masaüstü bilgisayar satın almak istiyorsanız, bu özellikler gerçekten tek alakalı olanlardır. Taşınabilirlik istiyorsanız, bir dizüstü bilgisayar satın almalı ve programlamada rahat olmanız için yeterince büyük bir ekran ve klavyeye sahip olduğundan emin olmalısınız. Ancak, bir dizüstü bilgisayarda kullanılabilirlik ve taşınabilirlik arasında ince bir denge vardır:

  • Ekran ne kadar büyükse, pil ömrü o kadar kısadır (ancak ekranın parlaklığını ne kadar kısık ayarlarsanız, pil ömrü o kadar uzun olur)
  • Ekran ne kadar küçükse, üzerine o kadar az şey sığdırabilirsiniz ve pencereler/masaüstü bilgisayarlar arasında o kadar çok geçiş yapmanız gerekir.
  • İdeal olarak, yan yana 2 pencereyi rahatça sığdırabilmelisiniz
  • Dizüstü bilgisayar ne kadar büyükse, o kadar ağırdır ve taşıması da o kadar ağır olur

Dizüstü bilgisayarınızı nasıl kullanmayı planladığınızı da kendinize sormaya değer. Gün boyu masanızda mı tutmayı planlıyorsunuz, yoksa kampüste her yere mi taşımayı, yoksa Yukon'da yürüyüşe mi çıkmayı?

Mümkünse, düşündüğünüz dizüstü bilgisayarları bizzat test etmeyi deneyin. Örneğin, belirli bir dizüstü bilgisayarın klavyesinde yazmanın hoşunuza gitmediğini ve alışamadığınızı düşünüyorsanız, kağıt üzerinde ne kadar iyi görünürse görünsün, o dizüstü bilgisayarı es geçmek isteyebilirsiniz.

Üniversite veya kolejdeki derslere hazırlanmak için bir dizüstü bilgisayar satın almaya çalışıyorsanız, daha spesifik önerileri ve tavsiyeleri olup olmadığını görmek için web sitelerini/bilgisayar bilimi veya yazılım mühendisliği bölümlerinin web sitelerini kontrol etmeyi deneyebilirsiniz.

Daha fazla bilgi ve daha ayrıntılı yardım için, daha kişiselleştirilmiş öneriler almak üzere aşağıdaki alt dizinleri ziyaret edin:

  • /r/suggestalaptop
  • /r/suggestapc

Ayrıca Chromebook satın alırken dikkatli olmak isteyebilirsiniz; bunlar ya bir miktar özelleştirme gerektirecek ya da çevrimiçi düzenleyiciler ve IDE'ler kullanarak çalışmanızı ve sürekli internet erişimi gerektirmesini gerektirecektir. Daha fazla bilgi için aşağıdaki bağlantılara bakın:

Tabletleri veya telefonları birincil programlama aygıtınız olarak kullanmaya çalışırken daha da dikkatli olmalısınız. Bir tablet veya telefon kullanarak programlama yapmak biraz çabayla mümkün olsa da, neredeyse tüm yazılım geliştirmeleri klavye kullanan masaüstü veya dizüstü bilgisayarlar kullanılarak yapılır.

Belirli bir markayı seçme konusunda tavsiyeye ihtiyacınız varsa, programlamanın bilgisayarınızdan özel bir şey gerektirmediğini unutmayın. Bu, iyi bir genel amaçlı bilgisayarın büyük olasılıkla iyi bir programlama bilgisayarı olacağı anlamına gelir. (Bu, iyi bir dizüstü bilgisayar aramayı kolaylaştırır, çünkü özellikle programcılara yönelik pazarlanan bir dizüstü bilgisayar aramanıza gerek kalmaz.)

Son bir isteğe bağlı kısıtlama: Özellikle makine öğrenimi, doğal dil işleme veya grafik (oyun geliştirme dahil) ile ilgileniyorsanız, GPU'lu bir makine satın almayı düşünebilirsiniz. Bunlardan herhangi birini yapmak için bir GPU'ya ihtiyacınız olmasa da, kodunuzu GPU'lardan yararlanacak şekilde dikkatlice yazarak (mümkün olduğunda) hızlandırabilirsiniz.

Makine öğrenimi veya NLP ile daha fazla ilgileniyorsanız, Amazon Web Services (AWS) veya Google Compute Engine (GCE) gibi hizmetler aracılığıyla bulutta GPU'lu makineleri nispeten ucuz fiyatlara kiralayabileceğinizi unutmayın.

Dizüstü bilgisayar/telefon olmadan Programlama öğrenebilir miyim?

Genel cevap, bir web tarayıcısı çalıştırabilen bir cihazınız olması koşuluyla evettir.

Birçok çevrimiçi IDE ve kurs bulunmaktadır.

Birkaç örnek

Kurslar:

IDE'ler


Kariyerler ve işler

Programlama yaparak çok para kazanabilir miyim?

Belki, ancak yalnızca bu işte iyiyseniz. Ancak bir tesisatçı olarak veya başka birçok işte de çok para kazanabilirsiniz. Ayrıca korkunç bir şekilde başarısız olabilirsiniz. Programlama garantili, güvenli bir iş değildir.

Bilgisayar Bilimleri derecesi olmadan programlama işi bulabilir miyim? Veyaherhangi bir derece?

Bu soru çoğunlukla bu alt dizinin kapsamı dışındadır: bunun yerine /r/cscareerquestions gibi alt dizinleri deneyin.

Ama kısaca, evet ve evet. Bilgisayar bilimleri derecesi olmadan ve genel olarak bir derece olmadan iş bulmak mümkündür, ancak olasılığı düşmüştür.

Eğer:

  1. Teknolojiyle ilgili olmayan bir dereceyi tamamlamanın ortasındaysanız ve ana dalınızı değiştiremiyorsanız, kendi kendinize programlama öğrenmek için ayrılmak yerine mevcut derecenizi tamamlamanız muhtemelen en iyisi olacaktır. İyi ya da kötü, bazı işverenler herhangi bir dereceyi tamamlamamış iş başvurularını otomatik olarak reddedecektir -- daha fazla bilgi için Google'da \"sertifikacılık\" arayın.
  2. Dereceniz yoksa veya teknolojiyle ilgili olmayan bir dereceyle mezun olduysanız, seçeneklerinizi değerlendirmede yardıma ihtiyacınız varsa /r/cscareerquestions veya /r/cscareerquestionsEU gibi alt dizinlerde sormayı deneyin. Ayrıca /r/cscareerquestions'ın SSS'sine bakın.

X'i yapmak giriş seviyesinde bir iş bulmam için yeterli mi?

Bu soru çoğunlukla bu alt dizinin kapsamı dışındadır: bunun yerine /r/cscareerquestions gibi alt dizinleri deneyin.

Basitçe cevaplamak gerekirse, bir işe girmenin %100 garantili bir yolu yoktur ve bir işe başvurmaya hazır olup olmadığınızı kontrol etmenin %100 güvenilir bir yolu yoktur. Yapabileceğiniz en iyi şey, bir görüşmeye davet edilme şansınızı artırmak için çalışmak, özgeçmişinizi göndermek ve ne olacağını görmektir.

Herhangi bir yanıt alamıyorsanız, geri bildirim almak için özgeçmişinizi /r/cscareerquestions' haftalık özgeçmiş inceleme başlığına göndermeyi deneyin.

Daha fazla ayrıntı için aşağıdaki Sektöre nasıl girebilirim ve giriş seviyesi bir iş bulabilirim bölümüne bakın.

Sektöre nasıl girebilirim ve giriş seviyesi bir iş mi bulacaksın?

Bu soru yine çoğunlukla bu subreddit için kapsam dışıdır -- kariyerle ilgili sorular /r/cscareerquestions adresinde ve kapsamlı wiki'lerine danışılarak daha iyi sorulur. Ayrıca AB'de yaşıyorsanız /r/cscareerquestionsEU adresine bakın.

Ancak genel olarak, kodlamayı zaten bildiğinizi varsayarsak, giriş seviyesi bir iş bulmanın iki ana aşaması vardır:

  1. İnsanların sizi görüşmeye davet etmeye başlamasını sağlayacak kadar öne çıkan bir özgeçmiş oluşturun
  2. Mülakatı geçin

İki aşama da biraz farklı stratejiler gerektirir.

1. Aşama: Göze çarpan bir özgeçmiş oluşturun

  1. Aşamada, amacınız özgeçmişinize, başvuran diğer adaylardan öne çıkmanıza (veya en azından onlarla karşılaştırılabilir olmanıza) yardımcı olacak öğeleri istikrarlı bir şekilde eklemeye başlamaktır.

Bunu yapmak için özellikle yararlı bir strateji, olası işverenlere gösterebileceğiniz önemsiz olmayan projelerden oluşan bir portföy oluşturmaya başlamaktır. Portföyünüz şunlardan herhangi birini içerebilir:

  • Bağımsız yan projeler
  • Gönüllü çalışma -- örn. belki kar amacı gütmeyen bir kuruluş için bir web sitesi yapmak
  • Sınıf projeleri
  • Programlamayı dahil etmenin bir yolunu bulduğunuz işinizde yaptığınız iş
  • Okuldaki bir kulüp için yaptığınız teknik işler -- belki bir kulüp yeni bir web sitesi istiyor veya belki de teknoloji odaklı bir kulüp bulabilirsiniz
  • Bir araştırma projesi -- bağımsız bir proje veya okulunuzdaki bir laboratuvarın parçası olarak yaptığınız bir araştırma
  • Geçmiş işlerinizden veya stajlarınızdan projeler

Güçlü bir portföye sahip olmak, işverenlere sorunları çözmek için programlama dillerini, kütüphaneleri ve teknolojileri başarıyla uygulayabilenleri gösterir ve beceri seviyenizi daha doğru bir şekilde ölçmelerinin bir yolunu verir. (Ve ortaya çıktığı üzere, önemsiz olmayan projeler üzerinde çalışmak da genel olarak beceri seviyenizi geliştirmenin daha iyi yollarından biridir!)

Başka bir deyişle, nispeten karmaşık şeyler inşa etme konusunda başarılı bir geçmişe sahip olduğunuzu kanıtlamak istersiniz. Bu alanda daha önce bir iş geçmişiniz yoksa, projeler üzerinde çalışmak bunu yapmanın daha iyi yollarından biridir.

Bazı ek notlar:

  • Projelerinizin görsel olarak gösterişli olması gerekmez. Çoğu işe alım uzmanı özgeçmişinize odaklanacaktır (ve genellikle sadece özgeçmişinizi okuyacaktır!) ve teknik bir geçmişe sahip işe alım uzmanları, tüm ilgi çekici projelerin şık bir arayüze sahip olmadığını veya ihtiyaç duymadığını anlayacaktır. Muhtemelen daha da önemlisi, yaptığınız işin karmaşıklığını sergileyecek şekilde projenizi özgeçmişinizde dürüstçe açıklayabilmenizdir.

    Belki de ana istisna, biraz görsel yetenek gerektiren bir role başvuruyorsanızdır. Örneğin, bir ön uç web tasarımcısı rolüne başvuruyorsanız, cilalı ve kullanılabilir bir web sitesi yapabileceğinizi gösteren projelere sahip olmak yardımcı olacaktır.

    • Elbette, projeler üzerinde çalışmak yapabileceğiniz tek şey değildir. Bilgisayar bilimiyle ilgili bir konuda derece almak gibi şeyler yapmak da kesinlikle yardımcı olacaktır.Birçok iş başvurusunda bulunan kişinin teknolojiyle ilgili bir derecesinin de olacağını unutmayın, bu nedenle sadece bir tane olması öne çıkmanıza yardımcı olmak için yeterli olmayabilir -- ayrıca okulunuzun sunduğu herhangi bir ders dışı fırsattan tam olarak yararlanmak isteyeceksiniz. İyi okulların, biraz araştırırsanız dahil olabileceğiniz birçok potansiyel yan projesi olacaktır. Bu potansiyel yan projelere erişim, öğrenim ücreti ödemenin en büyük avantajlarından biridir.
  • Bazı insanlar ayrıca, ilgili bir özgeçmiş/portföy oluşturma sürecini hızlandırmak için eğitim kamplarına katılırlar. Bir eğitim kampına katılmadan önce araştırmanızı yaptığınızdan emin olun: bazıları harika, bazıları ise düpedüz dolandırıcılıktır. Herhangi bir eğitim kampına katılmadan önce, Linkedin gibi sitelerde o eğitim kampının mezunlarına ulaşarak ne hissettiklerini öğrenin, eğitim kampının istatistiklerini CIRR üzerinde bildirip bildirmediğini kontrol edin, çeşitli topluluklardaki insanlara (sadece reddit değil) sorun... Ayrıca /r/cscareerquestion'ın eğitim kampları hakkındaki SSS bölümüne bakın.

  • Özgeçmişiniz çok fazla ilgi görmüyorsa, /r/cscareerquestions' veya /r/cscareerquestionsEU'nun haftalık özgeçmiş inceleme başlığında inceleme için yayınlamayı deneyin.

  • Güçlü bir özgeçmişiniz olup olmadığından emin değilseniz, /r/cscareerquestions'ın özgeçmiş tavsiyelerinde yayınlananlarla karşılaştırmayı deneyin threads

2. Aşama: Mülakatı geçmek

  1. Aşamada (mülakatı geçmek) tam olarak neler olur, bölgeden bölgeye değişebilir. Örneğin, birçok silikon vadisi benzeri şirket veri yapıları ve algoritmalar hakkında sorular sormayı tercih ediyor, bu nedenle bu tür şirketlere başvurmayı planlıyorsanız bu konuda güçlü bir temele sahip olmak şarttır. Bu, dünyanın diğer bölgelerinde veya diğer türdeki şirketler için mutlaka geçerli olmayabilir.

Karşılaşabileceğiniz bazı yaygın mülakat arketipleri şunlardır:

  • Size genellikle veri yapıları ve algoritmalar hakkında bir tür kodlama zorluğu vermek -- özellikle giriş seviyesinde. Bu tür mülakatların nasıl göründüğü ve bunlara nasıl hazırlanılacağı hakkında daha fazla bilgi edinmek için, \"Cracking the Coding Interview\" adlı kitabın bir kopyasını satın almayı veya ödünç almayı düşünün.
  • Mülakat yapacağınız belirli rolle ilgili sorular sormak -- örn. ön uç web tasarımı, güvenlik, veri bilimi...
  • Mülakat yapan kişiyle birlikte küçük bir programı birlikte oluşturduğunuz veya hata ayıkladığınız bir programda eşleşmenizi istemek
  • Bir tür eve götürülebilir zorluğu tamamlamanızı istemek
  • Daha büyük bir programın üst düzey mimarisini tasarlamayı denemenizi istemek
  • Özgeçmişinizde listelediğiniz öğeler hakkında sorular sormak (bazen genel, bazen tek bir projeye derinlemesine odaklanmak)
  • Genel olarak teknoloji hakkında bir tartışma yapmak

Not: Bu kapsamlı bir liste değildir. Ayrıca, farklı işverenlerin farklı şeyler arayacağını ve bir alanda yaygın olan mülakat uygulamalarının başka bir alanda neredeyse hiç duyulmamış olabileceğini de aklınızda bulundurmalısınız. Bu nedenle, yerel bölgenizdeki geliştiricilerle ağ kurmanızı ve onlardan tavsiye almanızı şiddetle öneririz.

Ayrıca /r/cscareerquestions' wiki'sine bakın -- ve belki de AB'de yaşıyorsanız /r/cscareerquestionsEU'ya bakın.


Şimdi ne yapmalıyım?

Artık yeni başlayan değilim:

Her programcının büyüdüğü ve bir sorunla karşılaştığı, gerçek dünyaya atıldığı bir zaman gelir. Gerçek dünyada, bir el tutma veya büyük bir rehberlik yoktur. Bunun yerine, yolunuzu nasıl çizeceğinizi öğrenmeniz gerekir. Buraya kadar geldiyseniz, genel programlama, web geliştirme, algoritmalar veya bu tür herhangi bir şey olsun, ilgi alanınız olmalıdır. Belki programlamayı içeren diğer, farklı alanları öğrenmek istiyorsunuz veya belki de sadece bundan sonra ne yapacağınızı bilmek istiyorsunuz.

Programlama sadece bir araçtır

Programlamaya başladığınızda, bir sonraki Reddit'i ne zaman oluşturmayı öğreneceğinizi veya o süslü grafikleri yapmayı veya farklı algoritmaları nasıl gerçekleştireceğinizi ne zaman öğreneceğinizi merak etmiş olabilirsiniz. Pekala, kendinizi artık yeni başlayan biri olarak görmüyorsanız, o zaman programlama araç kemerinizin altında. Şimdi onu nasıl uygulayacağınızı ve nasıl güçlendireceğinizi öğrenmeniz gerekiyor. Çok yakında bunları yapabilecek ve bunlar hakkında her şeyi öğreneceksiniz.

Programlama becerilerinizi geliştirmek

Birçok kişi programlama yaparken yeterince yetkin olmadıkları korkusuyla karşı karşıya kalır. Ve bu nedenle, birçok kişi programlama becerilerini geliştirmek ister. Ancak, bu aşamada bunu yapmanın tek bir yolu vardır ve bu da pratik yapmaktır. Uygulamaya adanmış birçok site ve konum var, örneğin /r/dailyprogrammer, CodeWars, HackerRank, Project Euler ve daha pek çokları.


Çeşitli

Gerçek zamanlı yardımı nereden alabilirim? (ör. discord, IRC üzerinden)

Bağlı toplulukların listesi için Gönderi yönergeleri > İlgili topluluklar adresine bakın -- ve özellikle de \"Gerçek zamanlı yardım\" bölümüne bakın.

Lütfen /r/learnprogramming'in bu sayfada listelenen topluluklardan hiçbiriyle resmi olarak bağlantılı olmadığını unutmayın. Listelenen tüm toplulukların moderasyon ekipleri bu topluluktan farklı ve bağımsızdır.

Bir çocuğa programlamayı nasıl öğretebilirim?

/r/ProgrammingForKids ve /r/CSEducation'a göz atmayı deneyin. Her iki alt dizin de başkalarına nasıl öğreteceğinize dair yararlı kaynaklar ve öneriler içerecektir.

Ayrıca bu soru hakkında geçmiş tartışmaları bulmak için bu sorguyu çalıştırmayı deneyebilirsiniz.

Genellikle önerilen bazı kaynaklar şunlardır:

  • MIT'den Scratch, 8 ila 16 yaş arasındaki çocuklar için tasarlanmış bir programlama dilidir. Bu dil tarayıcı tabanlıdır ve herhangi bir yazılım yüklenmesini gerektirmez.
  • Code.org, çocuklara kodlamayı öğretme konusunda kaynakları toplayan bir web sitesidir.
  • teachtogether.tech, CS öğretme konusunda çok az deneyimi olan ve pedagojik olarak en iyiyi öğrenmek isteyen kişilere yönelik ücretsiz bir kitaptır. practices.
  • pixelpad.io - PixelPAD, öğrencileri Scratch'in ötesine taşımak için yaratıldı. Öğrenciler için tasarlanan PixelPAD'in API'leri, yalnızca temeldeki mekanikleri ve kodu öğrenmeye elverişli özellikler içerecek şekilde tasarlanmıştır.
  • Reeborg's World - Scratch ile metinsel programlama dilleri arasındaki \"boşluğu kapatmak\" için tarayıcı tabanlı bir öğrenme aracı - şu anda JavaScript ve Python desteklenmektedir. Program, Scratch benzeri bir blok sisteminde \"birbirine tıklanabilir\" ve ardından metinsel dillere ve tam tersine geçiş yapılabilir.

Açık kaynaklı projelere nasıl katkıda bulunabilirim?

/r/learnprogramming github grubundaki projelerden birine katılın! Bu grup, yeni programcıların daha deneyimli programcılarla mentor olarak etkileşime girerek açık kaynaklı yazılımlara nasıl katkıda bulunacaklarını öğrenmeleri için projeler sağlama amacıyla jfredett tarafından oluşturulmuştur.

Grup henüz emekleme aşamasında ancak birkaç kişi onu kurup çalıştırmak için çalışıyor.

Aktif olarak her düzeyde deneyime sahip katılımcı arayan projelere bağlantılar içeren bazı web siteleri şunlardır ve genellikle yeni başlayanlar için çok ulaşılabilir olan açık hatalara veya sorunlara bağlantı verirler.

Açık kaynak projeleri üzerinde çalışma hakkında geçmişteki bazı konular şunlardır.

C/Python/belirli bir dil hakkında bir sorum var

Yazılım ya da programala kategorisi altında bir konu açın.

Sorularım bunlardan biri değildi; şimdi ne olacak?

Paylasio'da Yeni bir paylaşım yapıp olabildiğince detay vermeye çalışın.