Bir Matematikçilere Programlama Tanıtımı [kapalı]


30

Şu anda bir programcıyım, neredeyse 16 yaşındayım ve kariyerimi Bilgisayar Bilimi veya Elektrik Mühendisliği derecesine sahip bir şeye indirgedim (oldukça farklı olduklarını biliyorum ama bu soru arkadaşımla ilgili). arkadaş çok emin değil.

O çok matematik ilgilenen ve bu işi çok iyi ve ben o programlama dalabilir düşünüyorum ama o (bunu denemek için istekli değildir düzenlemek o olduğunu denemek için istekli ama önce hiç yapmadığı). Herhangi biri bana matematik problemlerini çözmek veya bir tür matematik içermek için programlamada engelleyebileceği bir dil veya araç önerebilir (makul bir temel seviyede).

Matematiği çok sevdiğini söylediğim gibi, programlamadan hoşlanacağını düşünüyorum, sorun bellek ayırma ve benzeri gibi giriş seviyelerinde önemli olmayan şeylerle uğraşmasını istemem. Bunun çok önemli olduğunu biliyorum, ama mesele şu ki, matematikle biraz programlama öğrenmesini istiyorum, umarım yeterince ilgilenirse, programlama olarak programlama olarak öğrenmeye başlayabilir.

Düzenleme: Bu tamamen ilgisiz olması değil - daha önce bölgeyi daha önce aktif olarak araştırmadığı, belki de bilgi sahibi olmadığı için. Onu istemediği bir şeyi yapmaya zorlamak istemem, bunu programlama hakkında daha fazla şey öğrenmesi için biraz zorlama olarak görüyorum. Eğer hoşuna gitmiyorsa - yeterince adilse, bunu kontrol edemiyorum ve istemiyorum ama zevk almak için çıkıyorsa - bu itme doğru şey olacaktı.


17
Neden arkadaşını ilgilenmediği bir yöne itmek istiyorsun?
HLGEM

3
Kayıt için, birlikte çalıştığım programcıların çoğunun matematik derecesi var. Bunun üzerine, onlar oldukça iyi.
AngryBird 14:11

1
@HLGEM ile aynı fikirdeyim. Biri beni saf teorik matematiğe doğru iterse bundan nefret ederim. Aynı şekilde, bu tür şeyleri isteyenler, sıkıcı uygulamalı öğelere doğru itilirse ondan nefret ederdi.
İş

4
Bazı şeylere bir bakış açısı koymak için - Sen 16'sın. Sen programcı değilsin, biraz programlama yapan bir öğrencisin. Arkadaşın bir matematikçi değil, matematikten hoşlanan (ve biraz öğrenen) bir öğrenci. @ Perl.j'den gelen cevabı sevsem de, bu konuya aşırı ulaşabileceğinizi düşünüyorum.
Joel Etherton

2
@ perl.j: Birisi gerekli "birincil çalışma alanını" matematikçi olmadığının kanıtı olarak göstermek için gerekli dereceye kadar. Hatta üniversitede ana matematik öğrencisi bile henüz matematikçi değil.
Joel Etherton,

Yanıtlar:


60

Matematik Logosu

Eğer "matematik benzeri" bir dil istiyorsanız, Haskell en iyi arkadaşınızdır (en iyi arkadaşınız için). Zahmetsizce kolayca yeni fonksiyonlar yapabilirsiniz. Sana arkadaşım için verebileceğim en iyi dil önerisi. İşte bazı bağlantılar:

Mathematica

Wolfram's Mathematica , sahip olabileceği bir başka ilgi alanı.

Mathematica is a computational software program used in scientific, engineering, and mathematical fields and other areas of technical computing. It was conceived by Stephen Wolfram and is developed by Wolfram Research of Champaign, Illinois.

Pahalı olmasına rağmen, buna değer. İşte bazı bağlantılar:

Algoritmalar

Algoritmalar herhangi bir program için önemlidir, ancak arkadaşınız bir dille rahat edince bunlarla başlamalıdır. İşte bazı bağlantılar:

Bu yardımcı olur umarım! Herhangi bir sorunuz veya geribildiriminiz varsa yorum yapmaktan çekinmeyin! Bu arada, bu bağlantıların tümü kaynakları serbest bırakmak içindir . Basılı bir kitap istiyorsanız, bir kaç tavsiyem var, bir yorum bırakın!



2
Ben bir matematik uzmanıyım ve Haskell'i matematik perspektifinden harika olarak tavsiye edebilirim. Ayrıca, onunla birlikte gelen bazı teorik kitapları okumaktan, çoğu dilden çok daha fazla hoşuma gidiyor.
Theo Belaire,

2
Haskell'i öğrenirse, daha sonra prova yapmak için uygun, bağımlı tipte bir dil olan Agda'ya bile geçebilir .
Peter C

4
@ SK-mantık Bunu nasıl söylersin? Matematik tamamen yeni mantıksal sistemler öğrenmek ve bunlar hakkında düşünmekle ilgilidir (matematikçilerin Turing makinesini icat ettiğini unutmayın ). Gerçekten, matematiği idare edebilecek birisinin değişken mutasyon fikrini kaldıramayacağını mı düşünüyorsunuz? Ve demek istediğim, Haskell'deki değişken mutasyon kadar basit bir şey yapmak için mağaza monadına ihtiyaç duymaktır! Bunun daha kolay olduğunu söylemek x = x + 1gülünçtür.
JeremyKun

2
@Bean, bu aslında bir ödev ifadesine ilk tepkimdi (ve o zamanki matematikten gelen ilkel doğrusal denklemlerin dışında hiçbir şey bilmiyordum). O zamandan beri aynı reaksiyonu tekrar tekrar gördüm. Önceden bir programlama deneyimi olmayanlara, aşamalı olarak zorunluluk haline getirilenlere fonksiyonel programlama kavramları sunmaya çalıştım. İlk önce her zaman kolaydı ve tüm bu "WTF?!?" Görünüşler her zaman yalnızca zorunlu ve OOP kavramlarının tanıtımıyla başlar.
SK-mantık

18

ML ailesindeki veya Haskell'deki fonksiyonel programlama ve diller matematikçilerin zihinlerine çok yakışır.


Çok doğru! Sonsuz listeler ve matematik zihinleri için mükemmel olan her şey.

14

Eğer matematiğe dalırsa, o zaman şüphe duymaz, C ++ gibi düşük seviyeli dillerde değilse de, o zaman ne yaptığına bağlı olarak daha yüksek seviyede, matematiğe özgü, Maple veya Mathematica gibi dillerde programlama yapar .

Ayrıca, araştırma alanına bağlı olarak, her ikisi de önemli miktarda programlama gerektiren uygulamalı matematik veya statik analizler yapabilir. Neye karar verdiğine bakılmaksızın şimdi programlamaya alışması daha iyi.


1
Ayrıca Python'u Sage ( sagemath.org ) ile aklını kaçırmaya çalışabilirsiniz .
Anton Barkovsky 14:11

İşte başka bir yüksek seviye, matematiğe özgü dil: math.uiuc.edu/Macaulay2
RyanTM

Ben sadece programlamayı keşfetmesine izin vermeni öneririm. Ona maruz kaldığında ve matematiksel olarak belirli bir dilde bir şey yapmasını gerektiren bir şeyi yapması kesinlikle istenecek, ondan hoşlanacak ya da nefret edecek. Bu olduğu zaman hoşuna giderse, ona en uygun dilleri seçebilecek. Arkadaşına yardım etmemelisin, hiç ilgi göstermediyse, bırakmalısın.
Ramhound

12

Ona Haskell'i öğret. Tıpkı matematikte olduğu gibi düşünebileceğiniz bir dil:

  • İşlev, girdiyi çıktıya eşleyen şeydir
  • Malzeme gerektiği şekilde değerlendirilir
  • Yazım çıkarımı ve çılgın yazım sistemi
  • Uygun sözdizimi
  • Büyük topluluk (örneğin StackOverflow'ta )
  • monads

Ona Haskell için en iyi rehberlerden biri olan http://learnyouahaskell.com adresini göstermenizi öneririm .


11

Matematiği inceleyen (sadece matematik dersinde lisans derecesini alan ve Uygulamalı Matematik / İstatistik bölümünden yüksek lisans derecesi aldım) ve daha sonra programlamanın eğlence / pratiklik / önemini farkettiğim için kariyerim boyunca bu konuyu gerçekten takdir ediyorum. Keşke 10 yıl önce beni programlamaya zorlayacak bir arkadaşım olsaydı.

İkiniz de Project Euler'ı kontrol etmelisiniz . Bu ne?

Project Euler, çözmesi gereken matematiksel bilgilerden fazlasını gerektiren bir dizi zorlu matematiksel / bilgisayar programlama problemidir. Her ne kadar matematik, zarif ve verimli yöntemlere ulaşmanıza yardımcı olacak olsa da, çoğu sorunu çözmek için bilgisayar kullanımı ve programlama becerileri gerekecektir.

Dile özgü bir öneri olmasa da, programlamaya başlamak için harika bir motivasyon olacaktır (özellikle de matematiğe zaten bir ilgi varsa). Sorunlar çok kolay ve yaklaşılabilir bir şekilde başlıyor, ancak hızla çok zor ve / veya zorlaşıyor. İkinizin de zevk alacağı iyi bir meydan okuma ve motivasyon.

Hangi dilin kullanılacağıyla ilgili olarak, C + +, R, Matlab ve Mathematica'da, hepsi de matematik topluluğunda büyük ve yaygın olarak kullanılan deneyimlerim var. Ama daha spesifik olarak, matematik için çok faydalı olan ancak diğerleri ile matematik ile sınırlı olmayan Python'u öğrenmeyi şiddetle tavsiye ediyorum (daha sonra hayatta daha fazla seçenek istemesi durumunda). Python ile başlamak kolaydır ancak öğrenilecek çok şey vardır. Diğerlerinden farklı olarak ücretsizdir. C ++ da iyi bir seçim olabilir, ancak baştan daha fazla engel olabilir.


Project Euler için +2, cevabını görene kadar ana soruya bir yorum ekleyecekti. OP ve arkadaşı kesinlikle buna birlikte girmeli.
kobaltduck

10
  • Matematikçiler için en büyük katılım Algoritmalardır. Arkadaşınız onları Python'da (arkadaş canlısı) uygulamaya başlamalıdır.

  • MATLAB gibi sayısal hesaplama ortamları matris manipülasyonları, fonksiyonların ve verilerin çizilmesi, algoritmaların uygulanması için faydalı olacaktır.


10

İlgilendiği matematiğe bağlıdır.

Soyut Cebir veya Kombinatorik konusunda daha fazla ise, muhtemelen karmaşık tip sistemi çeşitli matematiğin doğrudan programlanmasına izin verdiği için Haskell'i ister. ATS ayrıca bir seçenek olabilir.

Algoritmalar için tanıtım amaçlı ve Tamamen İşlevsel Veri Yapıları için Size İyi Bir Haskell Öğrenin'i tavsiye ederim .

O Matris Analizi, Diferansiyel Denklemler veya Dinamik Sistemler içine daha fazla ise, ben tavsiye ederim Matlab , numpy veya Octave . APL, Dyalog yoluyla da ilgi çekici olabilir; Buna rağmen onu başlatmayacağım. Nümerik Tarifler , C ++ iken, algoritmalar için iyi bir rehber olarak kullanılmak üzere uyarlanabilir.

İstatistik yapmak isterse, o zaman doğal seçim R'dir .


5

Matematik yüksek lisans öğrencisiyim ve lisans eğitimimi bilgisayar bilimleri dalında yaptım. Matematiğin programlamaya yönelik uygulamalarını keşfettiğim (ve bunun tersi) Math blog Programming adlı bir blog tutuyorum ve bilgisayar biliminin daha az matematiksel yönlerinin çoğunu oldukça kuru ve ilhamsız bulduğumu itiraf etmeliyim (temelde, karşıtlığım) Sektördeki tecrübelerime göre sistem programlamaya giren tüm saçma kesmeler.

Öte yandan, blogumda yüz tanıma (bir miktar doğrusal cebir), şifreleme yöntemleri, Turing makineleri ve hücresel otomatlar, seri katil aktivitesini öngörme modelleri, arama motorları ve bir sürü diğer matematiksel kavramlar gibi problemlere bakıyorum. . En iyi kısmı, fikirleri ve kendime ait olanları hayata geçirmem!

Arkadaşınızın geri kalanını yaptığımız gibi programlamayı sevmesini sağlamak için, onu gerçekten ilginç buluyorumprojesi. Programlama yönü, güzel bulduğu bir ürüne çalışmadan yapışmaz. Dillere gelince, Mathematica, Racket (çok arkadaşça, ama yine de güçlü bir Scheme türevi), Python ve Haskell'i öneririm. Mathematica muhtemelen en iyisidir, çünkü kendi matematiksel işlevlerini seçmeli olarak uygulayabilir ve projeyi bitirmek için Mathematica'nın yerleşik kütüphanelerini kullanabilir (örneğin, Fourier katsayılarını hesaplayan bir işlev yazabilir ve ardından analizin geri kalanını yapmak için Mathematica'yı kullanabilir. filtreleme, görüntü üretimi vb. Entegrasyon gibi temel konular bile bazı etkileyici projeler verir (farklı kuadratür kuralları, monte edilmiş carlo entegrasyonu, büyük veri setleriyle makine öğrenmesine yumuşak bir geçiş).

Ayrıca, buradaki yanıtların çoğu, matematik yapmayan veya matematiksel yazılım yapmayı önerdikleri dilleri kullanmayan insanlardan geliyor gibi görünüyor. İnsanların Haskell'i tavsiye etmelerinin nedeni, kategori teorisinin mümkün olduğu kadar gerçek anlamda uygulanmasına ve bazı temel kavramların bazı matematiksel tanımlarına iyi uymasıdır. Fakat eğer arkadaşınız yaşınıza yakınsa, matematiksel olarak kategori teorisine hazır değildir (bu vade, lisansüstü okula kadar az ya da çok işe yaramaz ve kendinize öğretmek zor olur) ve ilk dil olarak Haskell'in en dik olanıdır.önerilen dillerin öğrenme eğrisi (belki de Prolog daha diktir). Bir Javascript derleyicisini uygulamak için Haskell kullandım ve çok güzel ve zarif bir kod parçası ile bitirdim, ancak değişken mutasyon gibi sezgisel şeyler için, zaten önemsiz olmayan monadlerle uğraşmak zorundasınız.

Python ve Mathematica çok daha dostça davranacak ve Mathematica en sığ öğrenme eğrisine sahip olacak çünkü basitçe tüm kütüphaneler harika bir dokümantasyon ile güzel bir kullanıcı arayüzü içinde paketleniyor (sadece F1'e basın!). Öte yandan, hem gelişmiş matematiğe geçiş hem de aynı anda Haskell'e giriş sağlayan, duyduğum (ama okumamışım) bir kitap var . Olumlu Amazon yorumları var gibi görünüyor, bu yüzden kontrol etmek isteyebilirsiniz. Endüstri işleri yapmak istiyorsa, C # ve Java gibi dillere geçebilir, ancak o ormana asla girmesi gerekmeyecektir (ve bir çok endüstri matematiği yine de saf Matlab'dır).

Ama dediğim gibi, doğru proje öğrenme dili ne olursa olsun, proje ne olursa olsun bir sevinç olur.


3

Arkadaşınız resmi bir mantıktan hoşlanıyorsa ve Yapay Zeka'yı ilginç buluyorsa , Prolog'a bakmak isteyebilir .

Bu dille, tahminlerinizi (ilk varsayımlar, "gerçekler") ve çıkarım kurallarını ("ilişkiler") belirtir ve sonra sorular sorarsınız.

Prolog sonra söner ve sorunun sadece verilen gerçekleri ve ilişkileri kullanarak cevaplanıp cevaplanmayacağını belirler ve öyleyse size cevabı söyler.

Öyleyse "tom bir kedidir" ve "tüm kediler hayvandır" deyin ve "tom bir hayvan mı?" ve "doğru" cevabını alacaksın.

Ya da "bildiğiniz tüm hayvanları listele" diyebilir ve "tom" tek bir ürün listesine sahip olabilirsiniz.

Elbette, sözdizimi bundan biraz daha karmaşık, ama genel bir fikre kapılıyorsunuz.


Prolog, birinci dereceden bir mantığa sinir bozucu bir şekilde yaklaşıyor, fakat "uyumsuz" ve "yanlış" ı ayırt etmenin bir yolu olmadığından gerçekten uyuşmuyor. Bazı yönlerden düzgün bir dil, ancak bir matematikçinin üzerine basmaz ve programlama mantığı olarak adlandırmazdım.
David Thornley,

Olumsuzluğu test edemez misiniz?
Bill Michell

2

Arkadaşınızı denemeye teşvik etmenin en iyi yolu, programladığı gerçeği hakkında fazla düşünmeden programlamaya başlaması olabilir.

"Programlama" ile daha fazla uğraşmaya hazır olduğunda, aynı kitapla başlayabilir ve daha matematiksel bir temelden programlamayı öğrenebilirsiniz. Mevcut favori kitaplarımdan ikisi:

SICP, MIT Press web sitesinde serbestçe görüntülenebilir .

Eğer arkadaşınız matematiksel olarak eğimli ise, Lisp zorluk çıkarmaz ve sizi herhangi bir özel sözdizimi öğrenmek zorunda bırakmaz. Lisp'i öğrenmek Haskell'den daha kolay sanırım.


1

Haskell ile aynı fikirdeyim, ancak pratik bakış açısıyla, yaygın olarak kullanılan soyut bir makinede bir dil de öğrenmeli. Tabii ki bir JVM dili veya .NET dili demek istiyorum.

Bu platformlarda amiral gemisi dillerden biraz daha ilginç olan diller var. JVM'de Clojure ve Scala'ya bir göz atın. .NET platformunda F # 'a bir göz atın.

Ayrıca Microsoft Research'ten c-omega adlı çok ilginç bir .NET dili vardı, ancak bu sadece bir araştırma projesiydi.


1

Matlab, matematiksel ve bilimsel programlama için yaygın olarak kullanılır. Betiği temel alan bir dildir, öğrenmesi zor değildir ve tüm bellek sorunları kullanıcıdan gizlenir.

Yazılım Mühendisliği ve Elektrik Mühendisliği, Bilgisayar Mühendisliği ile birleştirilebilir.


0

Arkadaşınız programlama yapmayı denemek istemiyorsa, sorunu neden zorlamak istediğinizi anlamıyorum. Bir programcı olmanın anahtarının öğrenmeye istekli olduğunu düşünüyorum ve öğrenmek istemiyorsa programlamanın kendisi için değil.

Ancak söylendiği gibi, en iyi iddia, kendiniz küçük bir program oluşturmak ve ona göstermek olabilir. Belki de bazı kısımlarını bitmemiş halde bırakın ve onu bitirmenize yardım etmekle ilgilenip ilgilenemeyeceğini görün. Benim için bir programın arkasındaki algoritmalar ve mantık, sözdizimi yazdıktan sonra çok daha ilginçtir, bu yüzden belki de programın mantığı konusunda size yardımcı olmasını sağlayın ve sonra o şeyi kodlayın ve onu görmesine izin verin. bunun sonuçları.

Kaynak koduna hiç ilgi göstermiyorsa, ona kendi yazılarını nasıl yazacağını gösterin. Şahsen dilin kendisinin öğrenmesi kolay ve bol miktarda belgeye sahip olduğu sürece önemli olmadığını düşünüyorum.


0

Python etrafında inşa edilmiş tamamen ücretsiz bir matematik kütüphanesi ve topluluğu var. "Sage" ile başlayacağım, kullanmaktan gerçekten zevk almalı ve bu arada Python'da Programlamayı öğrenecek.


0

Bence arkadaşına bazı farklı değişkenler göstermelisin:

  • C
  • LISP / Şema
  • TEMEL
  • Bourne kabuğu
  • Prolog

Bence C ve LISP, farklı dillerin farklı görevler için daha uygun olabileceğini gösteren iyi bir başlangıç ​​noktasıdır. Her şey için Haskell veya Erlang'ı kullanmaya inanmıyorum.

Basit bir işlemcinin makine kodu (veya assembler) da ilginç olabilir. İlk C64'teki makine koduyla başladığım için her zaman mutlu oldum . ( MOS 6510 ) "Atmak" için sınırlı bir süreye sahip bir yetişkin olarak elde edilmesi zor olan uygulamalı deneyim.


Katılmıyorum Neden matematikle ilgilenen küçük bir çocuk Makine koduna çekildi? Ve neden C? Meclis işlemciler hakkında çok fazla bilgi olduğunu varsayar. C aynı şekilde ciddi programlama öğrenmek isteyen birisine bırakılan birçok gereksinimi de ortaya koymaktadır: işaretçiler, kayıtlar, kapsam belirleme, türler. Böyle bir kişi için programlamaya ilk giriş için, algoritmalara veya matematiksel fikirlerin uygulamalarına odaklanan bir şey (olasılık, rastgelelik, simülasyonlar), çok daha iyidir. Python, Lisp / Forth, Hatta temel. Bourne kabuğu ?? Neden? ...
Esad Ebrahim

0

Bana göre, programlama "bir şeyler yapmak", "bir eğer?" Olmak istemekten başlar. soru:

  • "Kendi web sitemi yapmak istiyorum", bu yüzden HTML vb. Hakkında bilgi edinin.

  • “Her ziyaretimde X'i tıklamamdan veya bu web sitesinde Y'yi görmemden nefret ediyorum. Bunu otomatikleştirmenin bir yolu yok mu?” Böylece yer imleri veya tarayıcı uzantıları yazmayı öğrenirsiniz.

  • "Tüm müziğimi ve gördüğüm araçların hiçbirini istediğim gibi yapmak istemiyorum", böylece veritabanlarını öğreniyorsunuz.

  • "Matematik Kulübümün masraflarını takip etmek istiyorum"; böylece elektronik tablolar, programlama makroları veya hatta veritabanları hakkında bilgi edinebilirsiniz.

Sürücünün gerçekten orada olması için, temel sorunun ondan gelmesi gerekir . Çözmek istediği bir problem bulmaya çalışırdım ve sonra çözümü otomatikleştirmesine / programlamasına izin veren bir araç / dil / sistem seçerdim.


-2

Bence Haskell ve Mathematica gitmenin yolu. İşlevsel dillerin çoğu matematik için de iyidir. Python da iyidir, matematik belgelerine bakın .

Bu modül her zaman kullanılabilir. C standardı tarafından tanımlanan matematiksel fonksiyonlara erişim sağlar.

Bu işlevler karmaşık sayılarla kullanılamaz; Karmaşık sayılar için desteğe ihtiyacınız varsa , cmath modülündeki aynı ismin işlevlerini kullanın . Karmaşık sayıları destekleyen fonksiyonlar ile yapmayanlar arasındaki fark, çoğu kullanıcı karmaşık sayıları anlamak için gerektiği kadar matematik öğrenmek istememektedir. Karmaşık bir sonuç yerine istisna almak, parametre olarak kullanılan beklenmeyen karmaşık sayının daha erken tespit edilmesini sağlar, böylece programcı ilk etapta nasıl ve neden oluşturulduğunu belirleyebilir.

Aşağıdaki fonksiyonlar bu modül tarafından sağlanmıştır ...

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.