Programlama dillerini öğrendiğimi aileme nasıl açıklayabilirim?


64

Şu anda bilgisayar bilimleri yüksek lisansımı bitirdim. Programlama dilleriyle, özellikle tip sistemlerle ilgileniyorum. Bu alanda araştırma yapmak ilgimi çekti ve önümüzdeki dönem konu ile ilgili doktora yapacağım.

Şimdi gerçek soru şudur: Bilgisayar bilimi veya ilgili alanlarda önceden bilgisi olmayan insanlara ne yapmak istediğimi nasıl açıklayabilirim?

Bu başlık, aileme, arkadaşlarıma ve diğerlerine ne yaptığımı açıklayamadığım gerçeğinden geliyor. Evet, "bütün mesele yazılım geliştiricilerin daha iyi yazılımlar yazmasına yardımcı olmaktır" diyebilirim , ancak bunun gerçekten yararlı olduğunu düşünmüyorum: "programlama" nın farkında değiller, bunun ne anlama geldiğini bilmiyorlar. Orta Çağ'dan birisinin oto tamircisi olduğumu söylüyor gibi hissediyorum: onlar ne hakkında konuştuğumu, nasıl geliştireceğimi bilemiyorlar.

Gerçek dünyayla iyi benzerlikleri olan var mı? "A-ha" anlarına neden olan aydınlatıcı örnekler? Aslında bilgisayar bilimi (ya da akademik) deneyimi olmayan 60 yaş ve üstü için kısa ve basit bir kod pasajı göstermeli miyim? Eğer öyleyse, hangi dili kullanmalıyım? Buradaki herhangi biri benzer sorunlarla karşılaştı mı?


Yorumlar genişletilmiş tartışmalar için değildir; bu konuşma sohbete taşındı .
DW

3
Paneli doğru anladıysam bu soru bir aşağı oy ve bir veya daha fazla yakın bayrak aldı. Lütfen yorumumdan vazgeçmeyi düşünmek için yorum bırakmayı düşünün. Bir süredir burada gizlenmeme rağmen, bu siteye ilk aktif olarak katılmam ve belki de bazı politikalara aşina olmam.
effeffe


1
Bu sorunun neden belirli bir sorunla ilgili bir sorudan daha fazla oy kullandığını anlayamıyorum, ki bu daha faydalı. Bu soru çok saçma ve gülünç şekilde oy kullandı. İnanılmaz!
nbro

2
@ nbro Soru hakkında saçma olan şeyi anlamıyorum ve belirli bir sorunun diğerinden daha "daha kullanışlı" olduğuna nasıl karar verdiğinizden emin değilim.
effeffe

Yanıtlar:


59

Birkaç dakikanız varsa, çoğu insan kağıda iki basamaklı sayıları nasıl ekleyeceğinizi ve çarpacağınızı bilir. Bunu yapmanın isteyin (ya da olsaydı, ellerinden itiraf) ve yöntemli bu görevi yapmak olduğunu kabul isteyin: eğer bu sayı 9'a büyükse, o zaman benzeri bir taşıma ekleyin ve. Ne yapmaları gerektiği hakkında verdikleri bu açıklama bir algoritma örneğidir .

İnsanlara algoritma kelimesini bu şekilde öğretiyorum ve deneyimlerime göre bu en iyi örnek oldu. Öyleyse, birinin bilgisayarların yapması gereken daha karmaşık görevler olduğunu ve bu nedenle bilgisayarları bu algoritmaları beslemek için net olmayan bir dilin gerekli olduğunu hayal edebileceğinizi açıklayabilirsiniz. Böylece, programlama dillerinin çoğalması olmuştur, çünkü insanlar düşüncelerini farklı ifade eder ve bu dilleri tasarlamanın yollarını araştırırsınız, böylece hata yapmak zorlaşır.

Bu çok tanınabilir bir durum. Çoğu insan, kullandıkları bilgisayarların çalıştırma programları veya bu programların insan tarafından yazılmış kaynak kod olduğu veya bir bilgisayarın kaynak kodunu 'okuyabildiği' ya da aritmetik ile ilişkilendirdikleri hesapların tek bir bilgisayar olduğu fikrine sahip değildir. yapmak (ve veri hareketi ve belki de ağ).

Araştırmam kuantum hesaplamada, insanlar bana ne yaptığımı sorduğunda, bunu açıklamaya çalışmıyorum. Bunun yerine, kuantum fiziğinin var olduğunu (genellikle Schrödinger'in kedisini ve aynı anda iki yerde olan şeyleri duyduğunu) ve bu garip fizik nedeniyle daha hızlı hesaplamanın mümkün olabileceğini açıklamaya çalışıyorum.

Amacım, insana girdiğinden biraz daha bilgili hissetmek, bilmedikleri bir dünya için heyecanlı hissetmek, ama şimdi onları tanıdığınız bir şey bırakmak. Özel araştırma sorularımı açıklamaktan daha değerli olduğunu biliyorum.


27
Bir iskambil destesini sıralamak, algoritmalar kavramını ortaya koymak için kolay bir yoldur.
Morwenn

2
@Morwenn Bu doğru! Günlük hayatta yürüttüğümüz birçok algoritma var! Kart dağıtmak algoritmiktir, trafiğin birçok algoritmik yönü vardır, olay tabanlı olmasına ve zorunlu olmamasına rağmen, pişirme işlemi otomatik pilotta yapıldığında algoritmiktir. Eklemekten hoşlanmamın nedeni, ilkokulda herkesin aynı algoritmayı öğrenmesidir; oysa, bir sayı listesini sıralamak için, insanların stratejileri değişkendir ve metodik değildir: yakın, bitişik sayıların kalıplarını bulmaya çalışırlar ve herkes bunu bilmez kart destesi yine de olması gerekiyordu (maça öncesi kalpler mi?)
Lieuwe Vinkhuijzen

Şahsen kuantum hesaplama hakkında sorulduğunda, fiziği tamamen önlüyorum, ancak genel bir fikir vermeye çalışıyorum (kuantum bir bilgisayarın daha iyi veya daha hızlı çalışmadığı, ancak normal bilgisayarların kapsamı dışında olacak şekilde hesaplamalar yapabilir ). Bu şekilde ne olduğunu sorarlarsa, temelde SIMD işlemenin (üstel paralel giriş verilerinin üstel boyutuna erişmeye yetecek doğrusal kaynaklarla), basit bir bakış açısıyla mutlu olma eğilimindedirler.
Vee

Sadece kartların ötesine gidebilirsiniz; Kısa bir süre önce kendimi, düşünmeden bile organize etmem gereken bir yığın kağıdı sıralamak için bir çeşit Quicksort çeşidini kullanırken buldum, çünkü temel bir yerleştirme dizilimi için çok fazla şey vardı.
JAB

@JAB Bu şaşırtıcı! Ama muhtemelen Quicksort'u zihninin arkasında biliyorsun. Ekleme ve sıralama açıklamanın avantajı, herkesin aynı ekleme algoritmasına sahip olmasıdır, ancak hiçbir çalışanın metodik bir sıralama algoritması yoktur. Öte yandan, bu bir avantaj olabilir! Farklı algoritmaları açıklayabiliyorsunuz. Bu, cs dışında matematiksel düşünen biriyle konuştuğumda aldığım rota ve aynı görev için farklı zaman sınırlarına sahip farklı algoritmalar kavramını ve neden daha düşük sınırların zor olduğunu gösteriyor.
Lieuwe Vinkhuijzen

18

Böyle bir şey denerdim:

Programcılar bilgisayarlara ne yapacaklarını söyleyebilirler. Bunu yapmak için bir programlama dili kullanmaları gerekir. Bu hem bilgisayarlar hem de insanlar tarafından anlaşılan bir dildir. Örneğin, bir Word belgesini düzenleyip bir tuşa basarsanız, bilgisayar bastığınız harfi gösterir. Bunun nedeni, bir programcının şunu söyleyen bir program yazmasıdır: Kullanıcı "A" ya basarsa, belgeye "A" koyun. Kullanıcı "B" ye basarsa, belgeye bir "B" koyun, vb. Bilgisayar, programcının yazdığı programdaki kuralları takip eder.

Şimdi bazen programcılar yanlışlıkla aptalca bir kural yazarlar. Bilgisayar yine de aptal kuralı izlemeye çalışacak, ancak kötü bir kurala uyursanız, kötü bir şey olacak. Örneğin, bazen bir Word belgesini düzenlerken, her şey aniden donar ve bilgisayar artık tepki göstermez. Bunun nedeni, Microsoft’taki bazı programcıların mükemmel olmayan bir program yazması olabilir.

Çalışmam, diğer programları ve bazı matematiği kullanarak programları, bu gibi hatalara karşı kontrol etmek için yöntemler icat etmektir. Temel fikir, bir program yürütüldüğünde, gerçekte çalıştırmadan ne olacağını tahmin etmektir.

Tabii ki, araştırmasından bu yana, bunun sadece küçük bir yönü üzerinde çalışıyorum, her şeyde değil, ama elde etmeye çalıştığımızın büyük resmi bu.

Alanım için benzer bir tarza sahip bir açıklama kullanıyorum (etki alanına özgü diller) ve sık sık bunun üstesinden gelmeme yardım ettiğini bildirebilirim "ah sen bir bilgisayar bilimcisisin. sana "sorunu. Anahtar, biri diğerinin ilgili olabileceği bir örneğe ulaşana kadar, buradaki Word belgeleri gibi ilk cümleleri çıkarmak gibi görünüyor. Örneği, örneğin, muhasebeciler için Excel veya patronlar için Powerpoint veya oyuncular veya web tarayıcıları veya bilgisayar oyunları için bilgisayar oyunları gibi diğer kişiye özel olarak muhafaza etmek için bonus puanlar.

Bu yüzeysel seviyede kalmak zorunda olmadığınızı unutmayın. Siz (ve diğeri!) İsterse, oradan tam olarak ne yaptığınızla ilgili detaylara dalabilirsiniz. Örneğin, "Mevcut projemde, geçen yıl icat ettiğimin gerçekte işe yaradığını matematiksel olarak kanıtlamaya çalışıyorum. Bu, bir programın gerçekte ne anlama geldiğini ve icadımın bir programın ne anlama geldiğini önceden tahmin etmem gerektiği anlamına gelir. Tahminin aslında doğru olduğunu gösterebilirim ".


12

Çoğu insan tarifleri anlar. Talimatları izlerseniz, iyi bir yemek alırsınız. Bazen, talimatları takip etmek zor olabilir. Örneğin, perojiler yaparken, Büyükanne Polonyalı Perogies'ten bir kelime almak için böyle talimatlar bulacaksınız :

Perojileri pişirmek için: Kaynayana kadar büyük miktarda hafif tuzlu su koyun. Bir seferde bir defada perojileri bırakın. Zirveye çıktığında yapılırlar. Çok fazla kaynatmayın, aksi halde sulu olurlar! Oluklu bir kaşıkla çıkarın.

Amanın. Büyükannenin bize olan tavsiyelerini gözden geçirelim. Bunları birer birer birer bırakın ... böylece hepsinin tencereye farklı süreleri vardır. Anladım. Zirveye çıktığında yapılırlar . Peki 'onlar' kaç? Her birini geldiği gibi mi yakalarım? Yüzde 80'in en üste çıkıp hepsini almasını mı bekliyorum? Bu delilik yanlış. Çok fazla kaynatmayın, aksi halde sulu olurlar! Soggy yapmak üzereyken ne kadar uzun kalmayacaklarını nasıl ölçebilirim? Beşi aynı anda zirveye çıkarsa hepsini almak için zamanım olacak mı?

Ve güven bana, günümde çok fazla perojiyi mahvettim. Bu, herhangi bir perojili aşçının daha önce karşılaştığı ciddi bir problemdir. Ancak, en temel analizde bile ortaya çıkan bu sorunlara rağmen, insanlar yine de aynı yöntemi kullanarak perojiler yapabiliyorlar. Fakat daha fazla sayıda perojiyi başarılı kılmak ve daha az sayıda peroji başarısız olmak için yapabileceğimiz bir şey var mı?

Birisi tarifleri daha güvenilir hale getirme konusunda uzmanlaşmış olsaydı, büyük olmaz mıydı? "Perojileri borulara ayırabiliriz, böylece sudan çıkıp çıkarlar!" Dedi. veya "perojiye özel bir boya ekleyebiliriz, tabii ki yemek yemeleri güvenli, onlara farklı tonlar verir ve en karanlıklarını çıkarmayı biliriz, çünkü en çok ıslak olma riski altındadırlar". Bu tarifi alıp olası problemleri çözebilecek bir uzman istiyoruz. Dünyanın dört bir yanındaki perogie aşçılarının yaşamları daha kolay olacak ve daha az sulu makarna-patates topakları bir köpeğe beslenecektir.

Programcılar da her zaman tarifleri takip ediyor. Ancak bazen kullandıkları ekipmanlar, kullandıkları talimatlar ve kullandıkları yorumlar, istedikleri cömert yemeği yapmak için bir araya gelmiyor. Neyse ki, kariyerlerini bir programcının hayatını daha üretken kılmaya adayan insanlar var. Senin durumunda, daha iyi hale getirmek için bir programcının kullandığı araçlardan biri olan dilin uzmanlığını yaptın.


7

İşte bunu anneme anlatmaya nasıl çalıştığımı:

Programlama dilleri, insanlar tarafından bir bilgisayara talimat vermek için kullanılır. Bir bilgisayarın yaptığı her şey, bir programlama dilinde yazılmış bir programlayıcı tarafından bir programlama dilinde yazılmış bir bilgisayar kodu ile yapılır.

Örneğin, bir düğmeye bastığımızda TV kanalının değişmesini istiyorsak, bunu yapmak için bir programlama dilinde bazı kodlar yazmamız gerekir. Aynı şey bir dizüstü bilgisayar, bir akıllı telefon ve kullanımı bir bilgisayarı içeren başka bir şey için de geçerli.

Programcıların tüm programları yazmak için kullanabilecekleri tek bir programlama dili olabilir gibi görünebilir. Ama bu sadece durum böyle değil. Tüm farklı uygulama türleri için farklı programlama dilleri mevcuttur.

Bazıları web siteleri, bazıları dizüstü bilgisayar uygulamaları (Microsoft Word gibi) oluşturmak için kullanılır.

Birçok farklı programlama dilinin olmasının sebeplerinden biri, bazılarının bazı görevlere diğerlerinden daha uygun olması. Diğer bir neden ise, bazı dillerin farklı bilgisayarlarla kullanılmak üzere tasarlanmış olmasıdır. Böylece her zaman bir akıllı telefon için yazılmış kodu alıp bir dizüstü bilgisayarda çalıştıramazsınız. Bazı programcılar birçok dilde program yapabiliyor ve çoğu kişi hızlı bir şekilde yeni dilleri öğrenebiliyor veya öğrenebiliyor olsa da, herhangi bir programcı bazı dilleri diğerlerinden daha iyi, bazıları ise hiç bilmeyecek.

Bu nedenle programlama dilleri, bilgisayarları çalıştıran önemli teknolojilerden biridir. İyi tasarlanmış programlama dilleri, programcıların verimliliğini büyük ölçüde artırabilir. Ayrıca güvenliği artırabilir ve programlama hatalarını, hataları ve hataları azaltabilirler.

Ve temel olarak, benim çalıştığım şey bu: Programlama dillerinin farklı bölümleri programcı verimliliğini nasıl etkiler? Belirli bir dilin hangi kısımları bir web sitesine kod yazmayı daha iyi hale getirir? Neden bazı diller diğerlerinden daha popüler?

Bu soruların ezoterik olduğu ve ortalama bir insanın günlük hayatından çok uzak olduğu görülmekle birlikte, bunun tersi doğrudur. Programlama dillerinin incelenmesi, bilgisayar kullanan herhangi bir ürün veya hizmet için hayati öneme sahiptir. Ve bugün bu hemen hemen her şey demektir;)


7

En iyi bahis, insan dilleriyle benzerlikler oluşturmak olabilir.

Programlama dilleri, bilgisayarlara talimatlar vermek için kullanılır. İnsan dilleri, fikirleri başkalarına iletmek ve kendi düşüncelerimizi şekillendirmek için kullanılır. Sapir- Whorf hipotez kullandığınız dil düşünce etkilediğini söylüyor. (Sapir-Whorf hipotezinin ne derece doğru olduğu tartışılır, ancak programlama dillerini tartışırken bunun doğru olduğunu kabul edebiliriz. Aksi takdirde, doktora programınızdan vazgeçebilirsiniz.

Egzotik olduğunu düşündüğümüz özelliklere sahip çok çeşitli insan dilleri vardır. Örneğin:

  • Bazı diller , her ifade ile deliliğinizi belirtmenizi ister: ifadenin kendi tecrübelerinize, kendi çıkarımınıza, duyum, spekülasyon vb.
  • Bazı diller aglütinasyonla büyük kelimeler oluşturur; her kelime gramer rolü hakkında birçok bilgiyi şifrelemek için oldukça değiştirilmiş olabilir. Diğer diller kelimeleri neredeyse hiç değiştirmez ve bu bilgiyi ifade etmek için kelime sırasına veya parçacıklara dayanır.
  • Dillerin kelime boyutu farklıdır . Bazı dillerde, yalnızca bir hüküm ile çevrilebilecek kelimeler vardır (örn. 엄친아 ). Bazı dillerin, diğer dillerin ödünç alacağı kadar iyi olan mükemmel ifadeleri vardır (örn. Schadenfreude).
  • Bazı dillerde sol / sağ kavramı yoktur; her şeyi kuzey / güney / doğu / batı olarak ifade etmelisiniz.
  • Bazı dillerin numarası yoktur. Diller , ortak renk adlarının sayısına da değişir .
  • Dilleri fonotaktik olarak değişir. Örneğin, hece oranı , Japonca'nın birçok basit heceyi kullanma eğiliminde olduğu, Çin'in yavaş olduğu, ancak tonlardaki bilgileri kodladığı için değişir.
  • Diller bilgi yoğunluğuna göre değişir . Çince-İngilizce-Fransızca çeviriye bakarsanız, Çince versiyonunun kağıt üzerinde çok küçük ve Fransızca'nın en çok yer kaplayacağını göreceksiniz.
  • İngilizce gibi bazı diller aldatıcı: Herkes bir dilden rahatça bir kelime ödünç alabilir ve İngilizce konuşabilir. Fransızca gibi diğer diller de değişime direnen standartlaştırıcı bir yapıya sahiptir. Örneğin, İzlanda dili, doğası gereği şiddetle muhafazakardır.

Objektif olarak konuşan en iyi dil var mı ? Cevap, ne yapmaya çalıştığınıza bağlı olabilir.

  • Telsizle gizlice iletişim kurmaya çalışıyorsanız, Navajo iyi bir bahistir. (En sevdiğiniz "salt yaz" dilinden bahsedin.)
  • Gelecek nesiller için bir uyarı yazmaya çalışıyorsanız ve yazıtın bundan birkaç bin yıl sonra anlaşılabilir olması gerekiyorsa, Çince (çok sayıda konuşmacı sayısı ve yazma sisteminin kararlılığı nedeniyle) kullanmak isteyebilirsiniz veya İngilizce (son bin yılda önemli ölçüde değişti, ancak çok yaygın olarak biliniyor). (C ve JavaScript muhtemelen "sonsuza kadar" yaşayacak.)
  • Çok sayıda cep telefonu olan Çin, merak uyandırmak için harika . (Perl şiiri)
  • Belki de tarafsızlık önemlidir, bu durumda Esperanto'yu seçebilirsiniz. (Java taşınabilir olacak şekilde tasarlanmıştır; C daha azdır.)
  • Belki bir düşünceyi tam bir hassasiyetle ifade etmeniz gerekir ve hiçbir doğal dil yeterli olmaz. Ithkuil'e başvurmak zorundasın !
  • Çok çeşitli kültürel farklılıklar ve belirli kelimelerle kültürel çağrışımlar nedeniyle bazı dil çiftleri arasında (örneğin Arapça-İngilizce ) çeviri yapmak çok zor olabilir . Benzer şekilde, bazı fikirler bazı bilgisayar dillerinde kolayca ifade edilemez, çünkü kavram henüz yoktur (örneğin, özyinelemeli).

Sonunda, bir bilgisayardaki her şey makine diline çevrilir, ancak iş için doğru dili seçmek, yazılımınızın verimliliğini, güvenilirliğini, performansını ve çevikliğini büyük ölçüde etkileyebilir. "Ciddi" projeler için Ada veya Java gibi deli gömleği dillerini ve maksimum kırbaçlık için Ruby veya Perl'i seçiyoruz . Bir veritabanını sorgulamak için, SQL olağan dildir; kendi C kodunu yazmak aptalca olurdu.

Bu analojilere dayanarak, işlevsel programlama, tip güvenliği, tip çıkarımı, vb. Gibi fikirleri birkaç saat boyunca açıklayabileceğinizden eminim.


1
Bununla ilgili bir zorluk, bazı insanların hiçbir zaman kendi doğal dillerini yansıtmadığıdır. Dolayısıyla, dil örnekleri neredeyse bazı insanların bir programlama dili kavramı olduğu kadar kavranması zor olabilir. Kişinin (en azından) iki dilli olduğunu biliyorsanız, beklentiler muhtemelen daha iyidir ....
TextGeek

@TextGeek İngilizce bile olsa lehçeler vardır. İnsanlar çifte olumsuzluk gibi dil kuralları ve cümleleri bir edat ile bitirme konusunda tartışıyorlar. Dil her zaman, bazen tartışmalı şekillerde gelişir. Manifatura popülaritesi yeni kısaltmalara yol açtı. Amerikan İngilizcesinde, herhangi bir ismi "-gate" eki ekleyerek bir skandala çevirebilirsiniz. Dil inovasyonunu ve çeşitliliğini takdir etmek için iki dilli olmanız gerektiğini düşünmüyorum.
200_success

3
  • bilgisayar dilleri, kabaca insan dilleriyle ilgilidir. standart / ortak / paylaşılan kelimeler kullanırlar. Binlerce insan dili, bazılarının geçersiz, diğerlerinin aktif olduğunu ve kelime dağarcığını ve kullanımlarının zaman içinde sürekli değiştiğini düşünün. bazı insanlar daha önce açıklanamayan kavramları ifade etmek için yeni faydalı kelimeler yaratır. bilgisayar dili ve insan dilinin örtüşen bir başka yönü de gramerdir . İngilizce gibi bazı diller çok karmaşık gramerlere sahiptir. tüm farklı zamanları ve onları yöneten karmaşık kuralları göz önünde bulundurun . diğer diller aynı zamana sahip değildir . başka bir korelasyon konuşmanın bölümleriylekategoriler örneğin isim, fiil, zarf, sıfat vb. bunlar bilgisayar dillerindeki tiplere benzer şekilde çalışır. daha önce dikkate alınmamış farklı konuşma kategorileri bölümleriyle veya farklı dillerden gelen yeni konuşma bölümleri kombinasyonlarıyla yeni diller oluşturduğunuzu; Bu nedenle, dilbilimin bilgisayar bilimleriyle bir bağlantısı olduğunu unutmayın; örneğin, Chomskian dil teorisinde

  • yazılım ve donanım genellikle motorlar ve makinelerle ilgilidir ve hatta bundan sonra isimler verilir. Eski bir yazılım analojisi var ki, karmaşık bir 7/24 üretim sistemini değiştirmeye çalışmak uçağın motorunu uçuş halindeyken değiştirmek gibi bir şey . ayrıca jet motorlarının oldukça karmaşık olduğunu ve değiştirilebilir parçaların büyük ve kesin özelliklerini içerdiğini unutmayın.ve burada, donanımı kontrol eden bilgisayar dillerine bir benzetme var. Jet motorlarının nasıl yapıldığını tam olarak tanımlayan belgelerin tüm karmaşıklığını hayal edin: tüm parçalar, nasıl inşa edildikleri, nasıl bir araya getirildikleri, nasıl monte edildikleri vs. kesin bir format / yapı / geleneksel kurallar kullanılarak mühendisler tarafından yaratılır / derlenir; yazılım buna biraz benzer.

  • yeniden makineleri, bilimsel ya da matematiksel eğitim ve hatta bir çocuk olmadan kimse temel kavram ve birçok özelliğini anlayabilir Turing makinası! harika bir yaratım. şüphelilerden biri, Turing'in daktilo ve / veya teletype makinelerinden ilham aldı. biri durum tablosunu tanımlayabilir ve onlara çarpımı hesaplayan örnek bir durum tablosunu gösterebilir ve birisi bir Turing makinesinin youtube animasyonunu çarpma gibi temel bir hesaplamayı izleyebilir. Onlara durum tablosunun bir dili hesaplayabileceğini veya kelimenin tam anlamıyla karar verebileceğini ve girdilerin kelimenin tam anlamıyla kelimeler olarak adlandırıldığını söyleyin . aslında, Turing makineleri dilleri kabul ediyorsonra onlara, her ikisinin de çarpımını hesaplayan iki durum tablosu olduğunu, ancak birinin diğerinden çok daha hızlı veya daha verimli olduğunu ve araştırmanızın daha iyi durum tablosu kavramlarını bulmayı içerdiğini söyleyin. Durum tablolarının etkin bir şekilde nasıl oluşturulduğunu bulmak , büyük durum tablolarının içeriğini özetleyen programlama dillerini içerir ! bir derleyici programlama dilinde yazılmış kodu büyük durum tablosuna dönüştürür.

  • sıralama algoritmaları, bilgisayar bilimine harika bir giriş seviyesi metaforudur. biri, her bir sıralama için farklı talimatlar aka algoritma listelerine bakabilir . Bir kabarcık diziliminin bir yerleştirme düzenine karşı ne olduğunu öğrenebilir, biri kart destesini kullanabilir. şimdi talimatların farklı setleri odaklanmak ve onlar, çok kesin dille yazılmış olması olduğunu düşünün , matematiksel ifadeler olarak kesin olarak sıkı olan sözdizimi vb ve temel ortaklıklar / yapıları vardır: koşullu mantık, döngüler, değişkenler vb ve bu kesin şartname sanatının bilgisayar dilleri ile ilgili olduğunu açıklayın.ve bazı farklı dillerin aynı algoritmaları verebileceğini, ancak bu dillerde çok derinlemesine çalışılmış bazı ince stilistik çeşitliliklerin olduğunu vb.


1
Neden bunu düşürdün? Bence pek çok görüş var. Kişi tüm hususlarda hemfikir olmayabilir, ancak burada pek çok olasılık var. +1
effekt

3

"Bilgisayarlara çalışmayı öğretenlere yardım ediyorum" diyorsunuz.

Fikir, programcıların bilgisayarlara programları kullanarak bir şeyler yapmayı öğrettikleri ve siz onlara yardım ediyorsunuz. Sanırım bilgisayarlar hakkında çok az şey bildiklerini varsayarsak işe yarayacak.


"Bilgisayarlar hakkında biraz bilgi sahibi olduklarını varsaymakla işe yarayacağını düşünüyorum." Bütün mesele bu: Cevabımı dikkatlice okuyorsanız, asıl sorunun, bilgisayarın gerçekte nasıl çalıştığı hakkında hiçbir ipucu olmayanlara ne yaptığımı açıklamak olduğunu göreceksiniz. .
effeffe

@effeffe: ama bilgisayarların var olduğunun farkındalar? Ve muhtemelen bilgisayarları hiç bilerek kullanmamış olsalar bile "programlar", "uygulamalar" veya "uygulamalar" denilen şeyler olduğu konusunda bazı fikirleri vardır. Bu yüzden basitlik adına programlama, (diğer şeylerin yanı sıra) bilgisayarın izleyebileceği talimatları yazarak bir uygulama oluşturmaktır. Doğal olarak , programlama veya nasıl geliştirilebileceği konusundaki herhangi bir ayrıntıyı takdir etmeleri çok zaman alır ve talimat alır , ancak eğer bilgisayarların ve programların zaman içinde daha iyi olduğunu bilirlerse, en azından bilgisayarlar hakkında "biraz" bilirler.
Steve Jessop,

3

Karşılaştırma yapmak istemiyorsanız, Lieuwe'nin getirdiği "algoritma" fikrinin bu fikri iletmek için çok güzel olduğunu düşünmeme rağmen, insanlar ve bilgisayarlar arasındaki yanlış anlamaları azaltmak istediğinizi söyleyebilirsin. Sonuçta, dillerle uğraşıyorsunuz ve bu insanlar için çok temel bir şey sanırım. Öyleyse neden bilgisayarla konuşmak istediğin başka bir akıl olduğunu iddia etmiyorsun?

İnsanlar bilgisayar yarattı, bu yüzden bilgisayarın zihninin nasıl çalıştığını biliyoruz. Ancak bilgisayar genellikle zihinlerimizin nasıl çalıştığını "bilmez". (Ya da birçok döngü için kodumuzun boşluklarında mutlu bir şekilde yaşayan karmaşık ve ince işlenmiş bir böcek yazarken asıl amacımız ne idi;)) Bu nedenle, onlarla iletişim kurmak için kullandığımız dili iyileştirmek bize kalmıştır ve yanlış anlamalar için olasılıkları azaltmak. Ve sen de öyle yapıyorsun. Yazım denetimi veya dilbilgisi gibi benzetmeler elbette bu bağlamda memnuniyetle karşılanmaktadır.


3

İşte yararlı bulabileceğiniz iki analoji:

  • İşim biraz müzikal notada yeni yaklaşımlar keşfetmek gibi. ( örnek ) Baskın gösterim sistemleri oldukça karmaşık olmasına rağmen, besteci, icracı için zaman / çaba / hataları azaltan alternatifleri araştırmak veya baskın sistemde ifade etmeyen ya da baskın olmayan şeyleri mümkün kılmak veya hatta sadece farklı düşünce türlerini teşvik eder ve böylece yeni kompozisyonlara yol açar. (Bu, zorluklardan birinin insanları yeni şeyleri benimsemeye ikna etmek olduğunu anlamayı kolaylaştırır.)

  • Sektörümdeki insanlar için daha iyi araçlar tasarlamaya yardımcı oluyorum . Tıpkı üretim endüstrisindeki insanlara, kablosuz matkaplar, lazer kesiciler ve 3D yazıcılar (hiçbiri 60 yıl önce bulunmayan) gibi yeniliklerle yardım edildiği gibi, yazılım geliştirme endüstrisindeki insanlara da daha güçlü, daha kesin, daha sağlam veya kullanımı kolay programlama dilleri ve özellikleri.


2

Büyük olasılıkla, dil öğrenmek için bir nedeniniz var - bu nedeni kullanın. Örneğin:

Bilgisayarları ve uygulamalarını daha ucuz, daha kolay ve daha güvenli hale getirmeye çalışıyorum.

Bu onların dikkatini çeken bir şeyse, biraz daha derine inmekten çekinmeyin, ancak çıkarımsal mesafeyi unutma - çoğu insan öğrencinin mevcut deneyim ve bilgisinden çok uzakta olan bir şeyi açıklamakta büyük sıkıntı yaşar.

Diller bilgisayar merdiveninin aşağısında. Açıklamaya çalıştığınız insanlar muhtemelen algoritmanın ne olduğunu bilmiyor , az ya da çok kullanışlı olan söz konusu algoritmayı temsil etmenin farklı yolları olduğundan daha az. Yeterince nazikçe giderseniz her şeyi açıklayabilirsiniz, ancak "programlama dili RnD" olarak "derin" bir şey açıklamak istiyorsanız birçok katmandan geçmeye hazır olun. Açıkladığınız kişilerin zaten matematiği iyi idare etmesine yardımcı olur, ancak bu bilgisayar bilgisi kadar nadirdir :)

Analojilerde kolay olun. Yardım ettikleri gibi ses çıkarıyorlar, ancak benim tecrübelerime göre, çok iyi bir yardım olduğunu düşünüyor olsanız bile, genellikle karışıklığı ekliyorlar . Programlama dilleri tür avukat konuşmak gibidir ... ama bu olmayan insanlar için çok yararlı değil zaten gerçekten programlama, avukat hem anlıyoruz. Gerçekten biraz daha fazla yardıma ihtiyacınız varsa, örnekler yeterince iyi çalışıyor - ancak bunları açıkladığınız kişiye (ve tam olarak ne araştırdığınızı)

Sıfırla nasıl bölemezsin biliyor musun? Bilgisayarların asla sıfıra bölmeye çalışmadıklarından emin olmaya çalışıyorum , bu yüzden birisi hata yaptığında çarpmıyorlar.


A Aşamalı ve yumuşak bir yaklaşım önerdiğiniz için.
PJTraill

1

En iyi analojilerin konuştuğunuz kişiye özel olduğunu düşünüyorum. Onlar ressam mı? Ne yaptığınızı, daha iyi fırçalar yapma teorisini keşfetmenin eşdeğeri olduğunu tartışın, sadece bu alan 600 yerine sadece 60 yaşında! Binicilikle? Yıllar boyunca göreve özgü at ayakkabılarının gelişimi ile karşılaştırın.

Gerçekten daha iyi anlamak istiyorlarsa, bunu açıklamanın en sevdiğim yolu Vergi formlarını doldurma ve her satırdaki talimatlar hakkında konuşmaktır. 20 yaşın üzerindeki insanların çoğunun IRS Form 1040 ile ilgili bazı deneyimleri olduğunu ve doldurduğunuz bu kutuların değişkenlerin atanmasından bahsetmekle güzel bir şekilde uyuştuğunu biliyorum. Sonra, yazılımın bu değerlerin dakikada yaklaşık 2 milyar eşdeğerini yaptığını belirtiyorum (tamamlanmış bir sayı, ancak bunun ötesine geçiyor). Bilgisayar dillerini okuyorsanız, insanların neden daha iyi talimatların gerçekten önemli olacağını kavraması kolaydır =)

Hala ilgileniyorlarsa, bu akış kontrolünü açıklamaya çalışmaya başladığım nokta ile ilgili. Genelde, Form 1040 üzerindeki akış kontrolünü tartışmayı bitirdiğimde, heyecanlanmaya başlar ve fikirlerimden herhangi birini henüz hükümete satıp satmadığımı sormaya başlarlar!

Sık sık gömülü sistemler hakkında konuşurum, bu nedenle bazen Form 1040 benzetmesini bir somun ekmek pişiren bir robotla (veya 500) birleştiririm. Genellikle iyi çalışır, ancak bir nedenden ötürü IRS vergi formlarından ağzınızda güzel bir tat bırakan bir şey yapmaya gitmek bazı insanlar için gerçekten zor bir durumdur.


1

Ailenizin bir tür bilgisayarı var. Muhtemelen bir değil, birçoğu. Masaüstü bilgisayarlarına, dizüstü bilgisayarlarına, telefonlarına veya iPad'lerine sahip olabilirler. Değilse, o zaman bir çamaşır makinesi veya bir video kaydı veya bir DVD oynatıcı veya içinde bilgisayar olan bir şey var.

Olmazlarsa, derler ki: "Üzgünüm ama bilgisayarsız bir hayat sürmeyi başardın. Bu yüzden sana ne yaptığımı açıklayamam. Ama dünya değişiyor. Sadece bana güvenmen gerekiyor Ne yaptığımı biliyorum. "

Herhangi bir bilgisayarları varsa, diyorsunuz ki: "Bu bir bilgisayardır ve sadece sihirle çalışmaz. Çalışır çünkü zeki bir erkek veya kadın bilgisayarınıza nasıl çalışacağını söyleyen bir program yazmıştır. bu zeki erkekler ve kadınlar gerçekten zor ve yaptığım şey işi kolaylaştırmak için onlara yardım etmek. "


-1

Bir süre önce, bilgisayar deneyimi çok az olan ya da hiç olmayan insanlar için kolayca anlaşılabilecek programlama için iyi bir analojinin örgü tarifleri yazmak olduğuna karar verdim .

İyi bir örgü tarifi aynı talimatlar listesinde size birkaç ilmek ve if ifadeleri veren birkaç boyut içerir. Örgü yapmayanlara okunamıyor ve hata içeriyorsa yanlış hizalanmış desenlerle veya fazladan bir kılıfla sonuçlanıyorsunuz. O zaman size kalmış - tarif yazarı olarak - tarifin yanlış kazaklara dayanarak nerede yanlış olduğunu bulmak ve düzeltmek.

Daha sonra "Ben, yemek tarifleri örgü için farklıdır nasıl bakıyor, Nålebinding ve benzeri crocheting ediyorum" ve (eğer gerçekten ne için bir benzetme bulmalıyız nerede X'e öğrenme örneğini kullanabilirsiniz yapmak ).


Asker programlama okumuyor. Programlama dillerinin tasarımını inceliyorlar.
David Richerby

@DavidRicherby Bu yüzden, tariflerin farklı el işçiliği türlerine nasıl bakacağına bakarak OP örneğini kullanmayı önerdim. Görünüşe göre bunlar da çok farklı.
Thorbjørn Ravn Andersen

-1

Bu sihirdir!

Teknik geçmişi olmayan insanlar yazılım / program yazmanın / yazılım mühendisliği yapmanın ne anlama geldiğini sorduğunda, onlara gerçekte ne olduğunu söylerim: büyü. Sihirbazlar belli görevleri yerine getirmek için ezoterik bir dilde büyüler yaparlar, asalarını sallarlar ve büyülü bir şey olur. Ezoterik bir dilde bazı büyüler yaparım, faremi kıpırdatırım ve büyülü bir şey olur (endişeleri olduğu sürece).

İkna olmadılarsa, akıllı telefonlarını açmalarını ve bunun üzerinde gerçekten bir şeyin nasıl çalıştığını bana söylemelerini istedim. Genelde şöyle derler: "Bilmiyorum, sadece var. Düğmelere basarım ve işler olur." Sonra onlara şöyle söylüyorum: "Evet, kesinlikle, ama gerçekte neler olup bittiğini biliyorum, ve temelde Harry Potter asasını sallayıp aynı şekilde:" Hocus pocus "demesiyle aynı. Bunun tamamen meşru bir açıklama olduğunu düşünüyorum.

Neredeyse herkes Harry Potter'ın kim olduğunu, ne yaptığını ve onu özel kılan şeyleri bilir (en azından sihirbaz olduğunu ve sihirle güçlü şeyler yapabildiğini). Basitçe, sihirbazların sihirlerini daha da güçlü hale getirmek için büyülerini yeni bir dilde yazmaları gerektiğini açıklayabilirsin, bu aslında gerçeklerden çok uzak değildir. Onlara, en sevdikleri tüketici cihazlarında daha da fazla sihir yaratabilecek daha güçlü sihirbaz nesline yardımcı olmak için daha güçlü büyü kitapları oluşturma sürecini incelediğinizi söyleyebilirsiniz. Herkes bunu takdir ediyor.

Büyük hata

Bu başarısız olursa, reçete örneğine geri dönüyorum, çünkü çözümlerin tek biçimliliği en azından insanlara bir kedinin derisini (veya bir kek pişirmeyi) birden fazla yolun olduğunu öğretiyor ve bu da bunu programlamanın bir parçası. zor. Ayrıca, kişinin CPU olma konumuna getirilmesine yardımcı olur ve bazen anlamadıkları talimatları izleyerek (çoğu insan kabartma tozu ile kabartma tozu arasındaki farkı ve bir tarifin neden diğerine sahip olduğunu bilmez).

Çıkmaz sokaklar

Matematiği örnek olarak kullanmaktan hoşlanmıyorum, çünkü matematik yapmak için adımların ne işe yaradığını anlamalısınız. Talimatları kör bir şekilde takip ederek çok fazla matematik yapamazsınız (peki, yapabilirsiniz, ama insanlar genelde böyle öğrenmezler). Örnek olarak sıralama yapmayı sevmiyorum, çünkü görevlinin takdir edemeyeceği kadar teknik. Sıralama örneğini takdir edebilecek biriyle konuşuyorsam, muhtemelen programlamanın ne olduğu hakkında bir fikirleri var ve muhtemelen kendileri denediler.


1
Bunun soru ile ne alakası olduğunu anlamıyorum. Özellikle, soru laypeople tip teorisini açıklamak için nasıl soruyor, ve tip kuramı olan matematik.
David Richerby

Belki de ne yazık ki, belki de değil, fakat genel olarak programlama dünya nüfusunun% 99 + 'ına kapalı bir kitaptır. Yıllar boyunca programcı olmayanların programlamayı anlamalarını, başarı olmadan anlamalarını sağlamak için oldukça zaman harcadım. Çeşitli tip sistemlerdeki karmaşıklıkların ve inceliklerin açıklanması, atom altı parçacık fiziğinin aynı insanlara açıklanmasına benzer - gözleri parlayacak ve muhtemelen kibar olacaklar ancak bunu alamayacaklar. Ve bu sorun değil - bunu anlamak zorunda değiller ve olasılıkla anlamadıklarını umursamıyorlar. Yapmamız yeterli. :-)
Bob Jarvis
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.