<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><blockquote type="cite" class=""><span class="" style="font-family: HelveticaNeue; display: inline !important;">I think Python's biggest appeal to new programmers is the fact that it has such a great standard library</span></blockquote><br class=""></div><div class="">This is not the case, at least in my teaching experience.</div><div class=""><br class=""></div><div class="">One of the largest hurdles for new programmers, and the one that differentiates beginning languages more than any other, is compiler strictness. This includes both syntax and static type checking.</div><div class=""><br class=""></div><div class="">We easily forget how hard learning syntax is: to see every piece of punctuation as significant, to read code as a parse tree, to think inside the box of the language’s type system. Programmers in their first months easily spend 50% of the time getting their code to compile, usually more like 80%.</div><div class=""><br class=""></div><div class="">The problem with compile-time strictness of any kind is that the compiler won’t do _anything_ until _everything_ compiles. I’ve seen this drive beginners to burnout, even drive them away from CS altogether. (To help calibrate your thinking about just how much we’ve forgotten that we learned: eons and eons ago, when my department taught its intro courses in Pascal and C++, the main first-year hurdle was not dealing with unsafe pointers, but knowing where to put the semicolons. Semicolons!)</div><div class=""><br class=""></div><div class="">When you don’t understand what a failure looks like, it’s tremendously helpful to be able to actually run the code and see the failure happen. Having the language say “this can’t possibly work so I won’t run it” is not helpful to beginners; it’s just bottled frustration. Having the language say “it worked until I got here, at which point this happened” is infinitely more helpful.</div><div class=""><br class=""></div><div class=""><div class="">The biggest hurdle to a beginning programmer is how _stupid_ programming makes one feel. We experience programmers are all used to this. Beginners are not. Their successes are rarer, the obstacles more daunting. Every stumble feels intensely personal. Anything that makes success more incremental and more self-discoverable helps.</div><div class=""><br class=""></div></div><div class="">• • •</div><div class=""><br class=""></div><div class="">You might think at this point that I’m arguing in favor of the “no types to compete with Python” mode, but I’d vote against it.</div><div class=""><br class=""></div><div class="">The ideal beginner language has a flexible, forgiving syntax that rewards guessing; the least compile-time type checking possible; and very clear error messages (both compiler and runtime). On all three counts, this sounds very far from Swift today. Better error messages would be good for all of us, but the other two just don’t sound like Swift.</div><div class=""><br class=""></div><div class=""><font face="HelveticaNeue" class="">Good beginner languages reward exploration by empirical experimentation. Good professional development languages reward clarity of intent. Those two things are often in tension, and Swift’s core aesthetic clearly lands on the side of the second.</font></div><div class=""><br class=""></div><div class=""><div class="">Is making it a good language for new beginners truly a design goal of Swift? I don’t think it should be. It _does_ seem like an excellent design goal to keep the language as simple, approachable, and learnable as it can be within its aesthetic.</div><div class=""><br class=""></div></div><div class="">Cheers,</div><div class=""><br class=""></div><div class="">Paul</div><div class=""><br class=""></div><div class="">P.S. The Bret Victor article that describes the thinking behind playgrounds has some oustanding ideas on making languages more learnable:&nbsp;<a href="http://worrydream.com/#!/LearnableProgramming" class="">http://worrydream.com/#!/LearnableProgramming</a></div><div class=""><br class=""></div><div class=""><div class="">–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––</div><div class=""><a href="https://innig.net" class="">https://innig.net</a> • @inthehands • <a href="http://siestaframework.com/" class="">http://siestaframework.com/</a></div></div><div class=""><br class=""></div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On Dec 5, 2015, at 6:13 PM, Austin Zheng via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">No, I don't. I think Python's biggest appeal to new programmers is the fact that it has such a great standard library, making it really easy to do whatever you want to do without figuring out how to find or add in external dependencies.<div class=""><br class=""></div><div class="">Anyways, mistyped Python code still breaks, it just breaks at runtime instead of compile time. In fact, I'd argue that this is even less beginner friendly, since you might write a function that works with some inputs and then inexplicably breaks with others.</div><div class=""><div class=""><div class=""><br class=""></div><div class="">Austin<br class=""><div class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Dec 5, 2015, at 4:09 PM, Amir Michail &lt;<a href="mailto:a.michail@me.com" class="">a.michail@me.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Dec 5, 2015, at 7:05 PM, Austin Zheng via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="">ml&gt;<meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I disagree with the idea that a type system is too much of a hurdle for beginner programmers to overcome.</div></div></div></blockquote><div class=""><br class=""></div><div class="">Don’t you think that Python currently provides a better introduction to programming due to its simplicity?</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">Austin</div><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Dec 5, 2015, at 4:01 PM, Kevin Lundberg via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="content-type" content="text/html; charset=utf-8" class=""><div dir="auto" class=""><div class="">This is somewhat possible today on Apple platforms with AnyObject. You can call any objc-visible method on AnyObject and it will compile, and the return type will also be AnyObject (I don't recall if the return type is optional as well or not). This doesn't work with value types, but neither does id in objc.</div><div class=""><br class=""></div><div class="">Having a more complete lax typed mode similar to Python or php I think is of limited usefulness, would add too much complexity to the language, and yield too much uncertainty about any given piece of swift code.&nbsp;<br class=""><br class="">--<div class="">Kevin Lundberg</div></div><div class=""><br class="">On Dec 5, 2015, at 6:50 PM, Adrian Kashivskyy via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:<br class=""><br class=""></div><blockquote type="cite" class=""><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class="">I can't believe I'm seeing a proposal to remove type safety, one of the fundamental features of Swift...<br class=""><div class="">
<div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class="Apple-interchange-newline">Regards,</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">Adrian Kashivskyy</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">iOS Developer at Netguru</div>
</div>

<br class=""><div class=""><blockquote type="cite" class=""><div class="">Wiadomość napisana przez Amir Michail via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; w dniu 05.12.2015, o godz. 20:51:</div><br class="Apple-interchange-newline"><div class=""><div class=""><p class="">Python is still easier than Swift for beginning programmers. But maybe such a mode can allow Swift to be used by beginners also? <em class="">____________________________________________</em>_ swift-evolution mailing list <a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a> <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></p>

<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=Q0Y0L54uOhrrHtFzGFlMmzHCkni7p1uaN05dut7Y5S4G0GoEQGYV8zFSQbCSyNzU-2FAsa7j-2FUD3WXyQP46SbPHF8I6gI8vOq1IfZwYjBjlDpnWX1CWqLulrsA4gW02al8NlT9Bm5WyXG2BRqocKtZ8erDDmsrDWjbrBOIGFzMtTuEZi7IpwltZomsodaeNR3-2BT3C9TyVOILgS3N59QcSdEaEDCZNBlz-2F1efwHoJ9cx7A-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
</div>
</div></blockquote></div><br class="">
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=AxVqvhl7qaAz-2FE20TrrgNT-2F44XdgxmRgRA416dJII-2BS3-2FkEQHhrM-2FxVCnGh0OhFlxVgBJevmZT2Ox1Kqs8GzDY-2BGBcaH5HUeTERBgLIMUNTnJF5-2BVco96wzBdMNECdp8w3uYWiEYzfa0dt-2BxsLE4POWwEGgIf2a3TOopk7Cku3KrCu9n8eYdMWQjL2PAabVP4eUx1HfRa94wYcE29tv7Zh4J4umLpxRq37P4OOSEU40-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">

</div></blockquote><blockquote type="cite" class=""><div class=""><span class="">_______________________________________________</span><br class=""><span class="">swift-evolution mailing list</span><br class=""><span class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a></span><br class=""><span class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br class=""></div></blockquote>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=7XtDdMHRjqIUi4tzSjSp2pWQIyxYdP6woIWn4vwV5gekUOV701FbMwRWJtnKUrWorolOo4bdn6wc2xgYpCYiGJWa3j4tsMBCZndAFNr7OoYBnD-2F1L3Zis8G30vcXUGrvPhIF-2FsfBLO6kO1XCHSL6bEP-2B8-2FHpVEsKWoB2bN3lsDk5U1N3rw4KkhHJwwYkF3RDZ0Z6TaSi0YtsccbUsmIxL6vighW7d1jlZLrQ7OU2gNs-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
</div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class=""></div></blockquote></div><br class="">
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=2B7F2l-2FSnuN-2Bu5iv-2FwIMsffhJH-2F7mw5PnNN35hfDpyQLj0YcB0B5NlXVLxTkjPUEcjscT8Bh5j9sGJUO-2BWqcZZF3AKi0-2BF2Dr47hdreFwZ3HLlGLJ9eUtoFXNyzNMeSw6greCZWnmfi1e5P48oqnw-2Bqav67DkKJLwIU1j1ptfjHIykrvXq3HOdx1WFP6MYkdgwqwJwkLzm-2BFdstAwKSWEOAPQZH2szFWNZT-2Fh2zRjqA-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
</div>

--r‡bžÚḟîẁ<br class="">‰íz{CŠÊhĠ+bḃx§–)Ŷ_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class=""><a href="https://lists.swift.org/ma" class="">https://lists.swift.org/ma</a></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></div></div></div>
<img src="https://u2002410.ct.sendgrid.net/wf/open?upn=zCg-2FSGF9Wk188a6c55kLyEbrj7YhaXxFEHM-2F-2B0YAlzUAIhxp0n9HyudLm9ChcJn7AjtyNuBvpQLzBKaJHhOybfNF5XEa1MYOMQMtiyqAj-2Bjf0ifytv8-2Fvvk0ujDgoNxibDtPuTcnA-2FSOC8AoERvRUMz3E3PkF2RUXZdW-2B1WvnT-2BZhuW-2FgCP1Hyuu98T5OH48vq8T22fgmachtiJczhWQZ8Z-2FBAoOPXnY7Pu-2FzVbExqE-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;" class="">
</div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></body></html>