Programlamanın temelleri güçlü ise, herhangi bir programlama dili kolayca yönetilebilir. Bir gerçek mi yoksa bir efsane mi? [kapalı]


33

Programlamada oldukça iyi temelleri olan bir kişinin herhangi bir programlama dilini kolayca öğrenebileceği doğru mu?

Programlama dilleri derken PHP, Perl, Ruby gibi çevik ve dinamik dilleri kastediyorum ama uzak geçmişin eski programlama dillerini değil.

Sadece java, groovy ve esnek bir şekilde çalıştım. Öyleyse amatör bir programcı olduğumu düşünerek, ancak hızlı öğrenen biriyim, kaba bir şekilde, bu tür dillerden herhangi birine ayak uydurmak ne kadar sürer?


1
"Herhangi" ile "En" ile değiştirin.

4
Bir dili 'çevik' yapan şey nedir? Çevik bir gelişim süreci olduğunu düşündüm .
oosterwal

17
Kolayca ustalaşabiliyor musun? Hayır. Kolayca öğrenildi mi? Evet. Ustalık, herhangi bir dilde yıllarca kullanılmasını gerektiren bir uzmanlık düzeyi anlamına gelir. Temelleriniz yerine geçtiğinde herhangi bir dili nasıl kullanacağınızı öğrenmek gerekir.
Joel Etherton

1
Hayır, sadece Similair dilleri için geçerlidir. Java'yı bilmek Haskell'i öğrenmenize yardımcı olmaz, ancak C ++ ve benzerlerini öğrenmenize yardımcı olur. PHP'yi bilmek derlemeyi öğrenmenize yardımcı olmaz, ama Ruby'yi öğrenmenize yardımcı olur.
iveqy

Yanıtlar:


46

Evet, rezervasyonlarla.

Dört hafta önce, C ve C ++ 'da profesyonel düzeyde, Java da amatör düzeyde bir beceriye sahip olduğumu söyleyebilirim. Patronum benden bir deneyim yazmamı engelleyen JavaScript yazılımı yazmamı istedi ve gitti.

Önümüzdeki iki hafta boyunca pek çok örnek kod parçacığını okudum, tüm harika kütüphaneleri buldum ve programımı yazdım. Tamamlandı ve çalışıyor. Sonra geçen hafta bir JavaScript kitabı satın aldım ve okudum ve oğlum ne yaptığımı bilmiyordum. Şimdi nesnelerimin neden bu kadar garip davrandığını anladım.

Şimdi söylüyorum, biraz JS biliyorum. Onu okuyabilir ve onunla çalışabilirim, ancak yazdığımın verimsiz, okunması zor ve en iyi uygulamaları takip etmediğinden eminim.

Genel olarak, hızlı bir öğrenci bir hafta alabilir ve yeni bir dilde düşük kaliteli ürün üretmeye başlayabilir. Java'yı biliyorsanız, C, C ++, PHP, Python, JavaScript'i hızlı bir şekilde alabilirsiniz, ancak yalnızca kodu değiştirmek veya iyi tanımlanmış işlevleri yazmak için yeterince iyi. (Regex'ler karmaşık olduğu için Perl daha zor olabilir.) Bir sistemi yeni bir dilde doğru bir şekilde inşa etmek için, muhtemelen tecrübeli danışmanlar altında profesyonel olarak bir yıl gelişim istersiniz.


18
İki yıl sürdüğünü söylemeye teşebbüs ediyorum. İlk yıl sizi nispeten uzman bırakmalı, ikinci yıl sizi nispeten verimli bırakmalıdır.
Tim Post

4
Bu deneyimi yıllar önce yaşadım (bir düzine dil öğrendikten sonra) ... Ada'da çalışmak zorunda kaldım. Ada'da kod yazmak birkaç gün sürdü. Gerçekten dil / çalışma zamanı sistem tasarımcılarının kafasına girmek ve bir yıl süren İYİ kodları yazmak.
hızla_ben

1
Dürüst olmak gerekirse, ben de Java'yı bu şekilde öğrendim. Şu anda 1 yıllık bir izdeyim ve "göreceli olarak yetkin" in doğru olduğunu söyleyebilirim.
Brad,

1
Bunun nedeni, temellerinizin, belki de güçlü olmayan, sadece geniş olmayan yerlerde olmasıdır. Diğer dilleri bilmiş olsaydınız, jscriptten önce kapatmalar, liste kavrama, diğer veri yapıları ve kapsam belirleme kuralları varsa, daha az sorun yaşayabilirsiniz.
Peter,

Patronumun (birkaç yıl VB tecrübesiyle) yazdığı kodu okuyana kadar VB.net ile benzer bir deneyim yaşadım. Kod, yinelenen kod gibi kokuyor, dilleri aşma eğiliminde!
DisgruntledGoat

28

Temelde cevap evet ... ve hayır ... temel olarak neyi kastettiğine ve kolayca ustalaştığına bağlı .

BİLGİ

  • Programlamanın temellerini bilmek, dile bakılmaksızın yardımcı olacaktır. Burada temel olarak, belirli bir paradigmaya özgü olmayan şeyleri kastediyorum. Algoritmik, Soyutlama seviyeleri, izolasyon vb.

  • Belirli bir paradigmanın temellerini (OOP, functionnal vs.) iyi bilmek, aynı paradigmayı destekleyen dilleri öğrenmeyi kolaylaştıracaktır. Bir dilin iyi bilinmesi, aynı ailenin dillerini hızlı bir şekilde almanızı sağlayacaktır.

  • Aynı ailede öğrenilen her dilde, diğeri bana çok daha kolay olacak, bu öğrenme eğrisi daha fazla bildiğiniz gibi katlanarak daha hızlı olursa şaşırmam.

EFSANE

  • Yeni bir paradigmaya geçerken, ilk paradigmanın dilini iyi bilmek aynı ailede bir dil öğrenmek kadar faydalı olmayacaktır. Aslında, aralarındaki farka bağlı olarak, ilerlemeden ve yeni paradigmayı gerçekten bozmadan önce ilk önce birkaç şeyi öğrenmeniz gerekebilir.

--- yorumlara dayanarak son bölümü düzenledi ---

Gerçek ...

  • İlk Paradigmayı bilmek, bir sonraki öğrenmeyi öğrenmenize yardımcı olabilir ...

fakat

Efsane

  • Uyanma, seni yavaşlatabilir ya da üçüncü paradigma için hiçbir yardımı olmayabilir.

sonuncusu hariç hepsi iyi. Anekdotal olarak, C gibi bir prosedürel programlama dili bilmek, Prolog gibi mantıksal bir dil öğrenmeye çalışırken hiçbir şekilde yardımcı olmadı ve benim durumumda, örneğin “S: Prologda bir döngüyü nasıl kodlarım? ==> "A: yapmazsınız".
Steven A. Lowe

2
Burada duyduğum fıkra delilleri ve Programlama programına yeni başlayan bir öğrenciyi oldukça kolay bir şekilde başlatabileceğinizi, ancak BASIC veya C # veya bunun gibi bir şeyde programlama yapmaları daha zor olduğunu gösteriyor.
David Thornley

1
@Steven & David: Sonuncusundan pek emin değildim. Prosedürden Nesnesine işlevselliğe geçtim ancak henüz mantık ailesine girmedim. Zaman ve tecrübe ilerledikçe daha kolay buldum ama genelleme yapmaya cesaret edemedi. Yorumunuzu temel alarak cevabı değiştireceğim.
Newtopian

14

benzer bir dil için evet

radikal olarak farklı paradigmalara sahip diller için, çok değil

Örnek: C ++ 'ı biliyorsun, Java'yı öğrenmek istiyorsun, bir parça kek; VB.NET'i biliyorsunuz, Prolog'u öğrenmek istiyorsunuz ... bütün pastayı, muhtemelen üç ya da dört pastayı


1
Katılıyorum. Tamamen farklı bir felsefeyi takip eden bazı diller var; Bu nedenle, örneğin, C gibi zorunlu bir dilden Prolog gibi mantıklı bir programlama diline biraz çaba sarf etmeden geçiş yapmak önemsiz değildir.
sakisk,

4

Kısa cevabın inanıyorum: "doğru ama doğrulaması zor". Bir dilin gerçek sözdiziminden yakından ilişkili API'yi, kullanımları, deyimleri ve paradigmaları (OO, fonksiyonel vb.) Öğrenmek çok zordur. Programlama temelleri ve bazı derleyici bilgilerinde güçlü bir bilgi ve deneyime sahipseniz, ancak yardımcı şeyler yüzünden ustalaşması zorsa, dilin kolayca fethettiğini düşünüyorum.

Açık bir örnek bir dilden diğerine geçiyor olacaktı; C’den Java’ya. Kod sözdizimi, C tarzı programlara yakından benzer, ancak java api'nin (jenerik, çöp toplama vb.) Ve büyük olasılıkla, şu anki "BT manzaramızda", bazı üçüncü taraf çerçevelerinden (Spring, jUnit) bilmeniz gerekir. , Hazırda Bekletme ve benzeri) işletmeler için yararlı bir şeyler yapmak için. Yani daha önce C yaptıysanız, dil sözdizimi sorun olmaz, gerisidir.

Java, C #, Javascript, HTML, CSS, Delphi, vb. Bilenler bu benden geliyor. Kullandığım çerçeveler veya kütüphaneler hakkında her köşeyi ve huyunu tanımıyor olabilirim. Benim deneyimim daha öncekilerden farklı. "Hızlı öğrenen" için, tamamen yanal bir düşünce.


Buna tamamen katılıyorum. En iyi uygulamaları / apis / popüler kütüphaneleri / vb öğrenmeyi öğrenmek, bir programlama dilinin sözdizimini öğrenmekten çok daha uzun zaman alır ve asıl sorun yalanlardı, ve sadece dil ve dille çalışarak biraz zaman geçirerek elde edilebilecek bir şeydi. ekosistem.
jviotti

3

Bilmeniz gereken Bilgisayar Biliminin temelleri yalnızca matematiksel temeli (küme teorisi, mantık, grafik teorisi, cebir, bilgi teorisi, algoritmik bilgi teorisi, vb.) Değil, aynı zamanda her biri için en az bir tane programlama dili içerir. grup - yani bir zorunluluk (muhtemelen OOP ile, ancak bu bit zorunlu değildir), bir istekli işlevsel, bir tembel işlevsel, bir mantıksal, bir birleştirici veya yığın tabanlı.

Bu temel sayesinde, verilen herhangi bir dili kısa sürede kolayca öğrenebilirsiniz. Bazı bitler eksikse, ciddi bir dirençle karşılaşabilirsiniz.

Dilin içini öğrenmenin en iyi yolu, önemli bir alt kümesi için bir oyuncak derleyici veya yorumlayıcı uygulamaktır (elbette standart bir kütüphane olmadan - bu herhangi bir dilin en karmaşık ve en sıkıcı kısmıdır).


2

Buradaki fikir birliğine göre, iyi temellere sahip olmanın bir dereceye kadar yardımcı olacağı ve buna katılmıyorum. Bununla birlikte, diğer cevaplardan eksik olan bir nokta, dilin deyimlerini almaktan ibaret bir konudur ve bence bir dilin ana dilini deyimsel olarak yazmanız gerektiğini düşünüyorum.

Örneğin using, cisimleri otomatik olarak imha etmek için ifadeyi hiç kullanmadan tamamen doğru C # harfleri yazabilirsiniz , ancak iyi yazılmış bir deyimsel C # içinde çok şey göreceksiniz using {...}. Bu yapıya sahip olan hiçbir hiçbiri-.Net dilini bilmiyorum (çok az başkalarını tanıdığımdan ve Java'm oldukça paslıdır, bu yüzden yanlış olabilirim), bu yüzden başka bir dilden gelen bir uzman bile Bu deyimi olduğu gibi sıfırdan öğrenmeniz gerekir.


Lisp ve Scheme'de yaygın olarak kullanılan benzer deyimler vardır, bu yüzden o arka plandan gelen biri için yeni bir şey olmayacak ve bilerek bu özelliği yeni bir dilde arayacaksınız.
SK-mantık

Evet, ama eğer Pascal veya ADA'dan geliyorsanız, görene kadar dikkat etmeniz bile gerekmeyecek olan tamamen yeni bir deyim olacaktır.
Steve,

Bu, yeni bir dil öğrenmek ve akıllıca araçlar seçmek için her gruptan en az bir dil bilmemiz gerektiğine inanmamın tam nedeni.
SK-mantık

@ SK-mantık: "kullanma" ve "dene ... nihayet" gibi şeyler gördüğümde, onları Ortak Lisp "çözme-koruma" nın kaba bir eşdeğeri olarak anlamada hiçbir problemim olmadı. Ancak, bunun gibi dil özellikleri, verilen çoklu paradigma dil seçiminde görünmeyebilir.
David Thornley

1

Bazı "oldukça iyi" ve "kolay" bir tanım için gerçek bir ifadedir.

Temelleri ne kadar iyi anlarsanız, bir dilden diğerine geçiş o kadar kolay olur. Örneğin, nesne yönelimli dilleri sağlam bir şekilde anlayan uzman bir Java programcısıysanız, örneğin, Java ve C # arasındaki temel sözdizimi farkları, bir veya iki haftada master olmak için nispeten kolay olmalıdır. İlişkili tüm kütüphanelerdeki işlevselliğin birinden diğerine nasıl eşleştiğini anlamak daha uzun sürer, ancak muhtemelen bir veya iki ay içinde temel kütüphaneler üzerinde düzgün bir işleyişiniz olacak. Öyleyse, A dilinde bir probleme yönelik standart yaklaşımın doğrudan B dilinde standart yaklaşıma (örneğin Java'da JPA yerine C # LINQ kullanmak istemiyorsanız) doğrudan çevirmediği durumları bulma meselesidir. Yeni dilde yeteri kadar Eski dilde düşünmekten ve "çevirmekten" ziyade onunla düşünüyorum. Bu, genellikle haritaları kullandığınız işlevselliğin ne kadar iyi olduğuna bağlı olarak muhtemelen üç ila altı ay sürer. Altı ay boyunca uzman Java programcısı muhtemelen oldukça verimli ve yetkin bir C # geliştiricisi olacaktı. Ancak, her şeyde olduğu gibi, yıllarca tüm karmaşık ayrıntıları öğrenmek, dilin bir parçası olmayan, ancak çevresindeki ekosistemin bir parçası olan çeşitli kütüphaneler ve eklentilerde ustalaşmak ve genel olarak kendinizi o dilde geliştirici olarak geliştirmek için harcayabilirsiniz. Uzman Java programcısı muhtemelen oldukça verimli ve yetkin bir C # geliştiricisi olacaktır. Ancak, her şeyde olduğu gibi, yıllarca tüm karmaşık ayrıntıları öğrenmek, dilin bir parçası olmayan, ancak çevresindeki ekosistemin bir parçası olan çeşitli kütüphaneler ve eklentilerde ustalaşmak ve genel olarak kendinizi o dilde geliştirici olarak geliştirmek için harcayabilirsiniz. Uzman Java programcısı muhtemelen oldukça verimli ve yetkin bir C # geliştiricisi olacaktır. Ancak, her şeyde olduğu gibi, yıllarca tüm karmaşık ayrıntıları öğrenmek, dilin bir parçası olmayan, ancak çevresindeki ekosistemin bir parçası olan çeşitli kütüphaneler ve eklentilerde ustalaşmak ve genel olarak kendinizi o dilde geliştirici olarak geliştirmek için harcayabilirsiniz.


1

Tamamen bir kişinin yeni dili öğrenme konusundaki coşkusuna bağlı olduğunu söyleyebilirim. Temeller güçlü olduğunda ve yeni dilin bir şeyi nasıl yorumladığını anlayabilirse, herhangi bir dili öğrenmek oldukça kolaydır.

En iyi örnek benim. Çalışmalarımın çoğunu C # ile yaptım, ancak kariyerime C'den başladım ve C ++, Java, VB, PHP, betik dilleri, perl vb. Öğrenmeye başladım. Bu terim boyunca herhangi bir yerde bu dili öğrenemediğim için hiç hissetmedim.


3
Ve tarif ettiğiniz diller birbirlerine az çok benziyor. Bir meydan okuma için Haskell veya Scheme veya Forth veya Prolog'u öğrenmeye çalışın.
David Thornley

1

Yeni bir programlama dili öğrenmek asla zor değildi, aksine, çoğu zaman çok eğlenceliydi. Yine de, baktım ama hiç anlamadığım diller var, çünkü eğer varsa onların arkasındaki fikri anlayamadım. Bir örnek COBOL'dur, hangi bölüme, hangi bölüme ve niçin gideceğini asla anlamadım. Diğer örnekler PHP ve Groovy'dir. PHP ile neden perl olduğu göz önüne alındığında, neden bir kişiye ihtiyaç duyulacağını anlamaya çalıştım. Belki birileri açıklayabilir. Groovy ile beraber arkasındaki kavramların bir kısmını da anlamıyorum.


1

Her şey değişir.

Bunun genellikle cevap olduğunu biliyorum.

Fakat temel ne demektir ? Bir paradigma için temelleri olan (OO gibi) bir çok insan diğer paradigmalar için (işlevsel gibi) sahip değildir.

OO'dan gelen ve tüm tasarım kalıplarını tanıyan pek çok insan, fonksiyonel tasarım kalıplarına dair hiçbir ipucuna sahip olmayabilir ya da liste kavrama, kurutma, kuyruk özyineleme, kapanışlar ...

Öyleyse EVET: Eğer temeller tüm paradigmaların temelleri anlamına gelirse.

Bu durumda sorun, javascript işlemsel, OO ve biraz fonksiyonel gibi çok paradigmalar kullanmak ve java, c ++, gelen ilginç bir kapsamı ...

Dolayısıyla temeller bu durumda yardımcı olmuyor, ancak burada daha fazla temel bulmak ve yine de başka bir dile dönüştürmek araç kutunuza daha fazla kalıp almak için daha kolay ve daha kolay olabilir.


0

Unutmayın, bilgisayar programlama sanatının tam olarak neyi kastediyorsunuzdur. Bu yüzden, bilgisayara ne yapacağını söylemenin herhangi bir yolu, Java'dan Access'ten Excel'e ve Visual Fortran'a kadar bir programlama dilidir.

Ve bazı diller sadece düz. IMHO Excel ve Basic kötü dillerdir; Java ve C ++ iyi dillerdir. FileMaker komut dosyası korkunç bir dildir. Özensiz değilseniz HTML mükemmel olabilir.

Öğrenebilir misin? Eğer iyiyse, evet. Eğer kötüyse, iğrenç eşiklerine bağlı. Seni kusmak isteyen şeyler öğrenmek zordur.

X dilini daha önce görmemiş ve oynamışsanız, bir projede X dilini kullanmayı taahhüt etmeyin.


0

Cevabı "Bu bir efsane değil bir gerçektir!"

Ben de senin gibiyim, ayrıca çeşitli teknolojilerde de çalıştım. Java, .NET ve son zamanlarda iPhone, android ve blackberry ile çalıştı.

Ağ kaynaklarla doludur, sadece bilgiyi okuyup anlayın, uygulayın ve ilerleyin.

Aslında "Teknoloji geliştirici için üretilir, geliştiriciler teknolojiler için üretilmez, teknolojiler değişir ancak geliştiriciler yapmaz".

:)

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.