Astro Code Schoolhttp://astrocodeschool.com/2015-06-20T12:00:00-04:00What I Learned Teaching at UNC2015-06-20T12:00:00-04:00Caleb Smithtag:astrocodeschool.com,2015-06-20:blog/what-i-learned-teaching-at-unc/<p>This spring semester, I had the honor of teaching JOMC-583 "Multimedia
Programming and Production" for the University of North Carolina at Chapel
Hill School of Journalism and Mass Communication. The course requires
university permission and two prior multimedia programming courses that focus
on frontend web development. It was a wonderful opportunity to partner with
the university, especially with a department that has shown leadership in
recent years with adopting innovative programs and coursework for students
interested in the data-driven area of journalism.</p>
<p>The subject matter of the course centered around backend web development with
Python and Django and also included other technologies such as git, SQL, and
the Unix command line. As a rough outline, the lecture topics were:</p>
<ol>
<li>
<p>Unix command line</p>
</li>
<li>
<p>Git and Github</p>
</li>
<li>
<p>Python</p>
</li>
<li>
<p>Introductory Django</p>
</li>
<li>
<p>Django views and templates</p>
</li>
<li>
<p>Django models and data modeling</p>
</li>
<li>
<p>Frontend development inside a Django project</p>
</li>
<li>
<p>Miscellaneous topics</p>
</li>
<li>
<p>Group project time</p>
</li>
</ol>
<p>The course materials were based on Steven King's curriculum for the course from
the year prior and is available at
<a href="https://github.com/calebsmith/j583">https://github.com/calebsmith/j583</a></p>
<p>At a high-level, the first half of the course was a mixture of lecture and
individual assignments while the second half of the course was spent on
two projects. The first development project was completed individually and was
small in scale. The second and final project was more ambitious and
required collaboration using Github. This served as a nice progression from
focusing on concrete skills in isolation to applying those skills and
developing further experientially.</p>
<p>One of the group projects was deployed successfully to Heroku and is visible
here: <a href="http://rackfind.herokuapp.com/">http://rackfind.herokuapp.com/</a></p>
<p>While I think the course was a major learning experience for the
students, it certainly was for me as well. It was particularly interesting
to see the subject areas that students picked up easily or struggled with
and how this often differed with my expectations. In particular, some
areas that students picked up quickly were:</p>
<ol>
<li>
<p>The essential Unix command line tools such as: pwd, ls, cd, and so on</p>
</li>
<li>
<p>Python basics</p>
</li>
<li>
<p>Python packaging and setup, especially pip and virtualenv</p>
</li>
<li>
<p>Using Git as a sole contributor</p>
</li>
<li>
<p>Creating a data model</p>
</li>
</ol>
<p>The students were much quicker to learn these concepts than I anticipated. For
instance, we spent two lecture periods focusing on developing skills for
the command line, but the first class was enough for most tasks. In the
future, I would likely plan on needing only one lecture for that topic.</p>
<p>Some topics that required more reinforcement than anticipated were:</p>
<ol>
<li>
<p>Why writing a custom backend is desirable as opposed to a static HTML site</p>
</li>
<li>
<p>The semantics of Django URL routing.</p>
</li>
<li>
<p>How to glue JavaScript code into Django templates</p>
</li>
</ol>
<p>I think the fundamental reason that students struggled with this more than
anticipated relates to their arrival to the domain of backend programming
from a background of frontend web development.</p>
<p>This was a great experience for me and it was rewarding to see my students
succeed in programming with Python and Django. I'm very much looking
forward to more opportunities to teach web development in the future.</p>Python Beginner’s Night at Astro2015-06-19T13:30:00-04:00Brian Russelltag:astrocodeschool.com,2015-06-19:blog/python-beginners-night/<p><img src="/static/img/Python-Beginners-Night-061815.jpg" width="600px" class="left"></p>
<p>Last night we held the first <a href="http://tripython.org/Members/brussell/june-15-pbn">TriPython Python Beginner’s Night</a>. About twenty three people interested in Python attended. Many of them were very experienced developers who answered all kinds of questions. From the very basic to the advanced.</p>
<p>A big thanks to all the <a href="www.caktusgroup.com">Caktus Group</a> folks who attended. You helped a lot of people! Thanks also to the other volunteers who attended. It's really cool to live in a city with so many people who enjoy helping others.</p>
<p>The next free <strong>Python Beginner's Night</strong> is Monday July 6, 2015 from 6pm to 8pm here at Astro Code School (<a href="https://goo.gl/maps/Y1i8i">map</a>). We'll be here on the first Monday of each month with free pizza and Python experts. If you can join us please RSVP on the <a href="http://www.meetup.com/tripython/events/223042303/">Meetup page</a>. See you soon!</p>Learn About Astro Code School Info Session2015-06-18T15:00:00-04:00Brian Russelltag:astrocodeschool.com,2015-06-18:blog/info-session-hangout/<p><a href="https://plus.google.com/u/0/b/102789854775552081704/events/cag7q1uhvvv8r4t6dtd4c9n5luo" class="left"><img src="/static/img/Astro_InfoHangout.jpg" alt="Learn About Astro Code School Info Session" title="Learn About Astro Code School Info Session"></a>
Join us <em>online</em> at 10am EDT on Thursday, June 25, 2015 for a <a href="https://plus.google.com/u/0/b/102789854775552081704/events/cag7q1uhvvv8r4t6dtd4c9n5luo">Google Hangout information session</a>. Caleb and I will host the hangout and talk a little bit about Astro then answer any questions you might have. Please share this post and RSVP on the Hangout page. </p>Video - Conditionals in Python2015-06-05T02:30:00-04:00Brian Russelltag:astrocodeschool.com,2015-06-05:blog/conditionals-python/<div class="js-video [vimeo, widescreen]">
<iframe width="560" height="315" src="https://www.youtube.com/embed/UMwA8qEJcgA?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
</div>
<p>In Caleb Smith's third video in our <a href="https://www.youtube.com/playlist?list=PLHO1zGieXehD4WmgPMTr3t1ReCnXAMXB-">series about beginning Python</a> he shows you comparison operators, input(), print(), indentation and if statements in Python. Use <a href="http://repl.it/languages/Python3">http://repl.it/languages/Python3</a> to follow along in the browser.</p>
<p>Don't forget to subscribe to the <a href="https://www.youtube.com/channel/UC5rPFEi557JANPqslSGmXZw">Astro Code School YouTube channel</a>. We have a lot more videos in the works.</p>Video - Using repl.it with Python 32015-06-03T11:00:00-04:00Brian Russelltag:astrocodeschool.com,2015-06-03:blog/video-using-replit-python-3/<div class="js-video [vimeo, widescreen]">
<iframe width="560" height="315" src="https://www.youtube.com/embed/3qbuAu-B3Qo?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
</div>
<p>This is Caleb Smith's second video in our <a href="https://www.youtube.com/playlist?list=PLHO1zGieXehD4WmgPMTr3t1ReCnXAMXB-">series about beginning Python</a>. It shows you how to use the web based Python shell and text editor repl.it. Use <a href="http://repl.it/languages/Python3">http://repl.it/languages/Python3</a> to follow along in the browser.</p>
<p>Don't forget to subscribe to the <a href="https://www.youtube.com/channel/UC5rPFEi557JANPqslSGmXZw">Astro Code School YouTube channel</a>. We have a lot more videos in the works.</p>Video - Very First Steps with Python2015-06-02T13:00:00-04:00Brian Russelltag:astrocodeschool.com,2015-06-02:blog/video-very-first-steps-python/<div class="js-video [vimeo, widescreen]">
<iframe width="560" height="315" src="https://www.youtube.com/embed/SZ_HWHubT6g?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
</div>
<p>This is Caleb Smith's first video in our <a href="https://www.youtube.com/playlist?list=PLHO1zGieXehD4WmgPMTr3t1ReCnXAMXB-">series about beginning Python</a>. It introduces some fundamentals of programming in Python. Topics for this video include data values, types, basic operators and variables.</p>
<p>Don't forget to subscribe to the <a href="https://www.youtube.com/channel/UC5rPFEi557JANPqslSGmXZw">Astro Code School YouTube channel</a>. We have a lot more videos in the works.</p>Astro Launches in Durham2015-05-28T09:00:00-04:00Brian Russelltag:astrocodeschool.com,2015-05-28:blog/astro-code-school-launches-in_durham/<p><img src="/static/img/russell+bell.jpg" width="600" class="left" alt="Astro Code School Director Brian Russell tells Durham Mayor Bill Bell about the school" title="Astro Code School Director Brian Russell tells Durham Mayor Bill Bell about the school"></p>
<p>Friday May 1 we held our launch party. A lot people showed up to welcome Astro Code School to Durham and learn about what we do. I had a great time telling our story to guests. Plus it was fun to meet <a href="http://durhamnc.gov/ich/mayor/Pages/Home.aspx">Mayor Bell</a>!</p>
<p>As a resident of the City of Durham I love working Downtown. It's close to where I live, convenient to a lot of great food and drink, and a great place to run into cool people all the time. I feel as if I'm part of something really awesome at a cool time in Durham history.</p>
<p>Astro's mission to educate people really fits well with a community who's committed to serving others. I first learned about this awesome attribute of Durhamites from friends who work at local non-profits. Inspired by them I joined AmeriCorp in 2004 as a technology VISTA at the <a href="http://www.durhamliteracy.org/">Durham Literacy Center</a>. This experience gave me quite an education and was a big influence on me.</p>
<p>A giant thanks to all the people at <a href="http://www.caktusgroup.com">Caktus Consulting Group</a> who helped organized the event. Without them it wouldn’t have been possible.</p>
<p><img src="/static/img/Colin+Mayor+Alex.jpg" width="600" class="left" alt="Caktus CTO Colin Copeland, Durham Mayor Bill Bell, and Caktus CBO Alex Leman" title="Caktus CTO Colin Copeland, Durham Mayor Bill Bell, and Caktus CBO Alex Leman"></p>
<p>We’re right downtown Durham at 108 Morris Street. I hope that when you have a moment you'll stop in and say hi. </p>Video - Tips for Using Generators in Python2015-05-08T10:05:00-04:00Brian Russelltag:astrocodeschool.com,2015-05-08:blog/video-tips-using-generators-python/<div class="js-video [vimeo, widescreen]">
<iframe width="560" height="315" src="https://www.youtube.com/embed/LelQTPiH3f4?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
</div>
<p>Here's the third screencast video in Caleb Smith's <a href="https://www.youtube.com/playlist?list=PLHO1zGieXehCIHU87fNpMWgB2s53IdYk2">series about functional programming in Python</a>. This one describes generators, iterators and iterables in Python with some tips on how to implement generators.</p>
<p>Don't forget to subscribe to the <a href="https://www.youtube.com/channel/UC5rPFEi557JANPqslSGmXZw">Astro Code School YouTube channel</a>. Lots more educational screencasts to come.</p>Video - Implementing Decorators in Python2015-05-01T13:05:00-04:00Caleb Smithtag:astrocodeschool.com,2015-05-01:blog/video-decorators/<div class="js-video [vimeo, widescreen]">
<iframe width="560" height="315" src="https://www.youtube.com/embed/fAiN-iEsGBA?rel=0&controls=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
</div>
<p>This screencast provides some insights into implementing decorators in Python
using functional programming concepts and demonstrates some instances where
decorators can be useful.</p>
<p>In the video, I reference the blog post
<a href="http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/">Python Decorators in 12 Steps</a>
by Simeon Franklin for further reading.</p>Video - Functional Programming in Python2015-04-24T10:05:00-04:00Brian Russelltag:astrocodeschool.com,2015-04-24:blog/video-func-prog/<div class="js-video [vimeo, widescreen]">
<iframe width="560" height="315" src="https://www.youtube.com/embed/goypZR_lQ7I?rel=0&showinfo=0" frameborder="0" allowfullscreen></iframe>
</div>
<p>In this video our Lead Instructor Caleb Smith presents basic functional programming concepts and how to apply them in Python. Check back later for more screencasts here and on the new <a href="https://www.youtube.com/channel/UC5rPFEi557JANPqslSGmXZw/">Astro YouTube channel</a>.</p>Intro to Django by PyLadies RDU2015-04-24T09:50:00-04:00Brian Russelltag:astrocodeschool.com,2015-04-24:blog/intro-django-pyladies/<p><img src="/static/img/pyladies-logo-magenta-600px.png" width="600" class="left"></p>
<p><a href="http://www.meetup.com/pyladies-rdu/">PyLadies RDU</a> will be offering a free four hour workshop on Django here at Astro! It'll be taught by Caktus Django developer <a href="https://www.caktusgroup.com/about/rebecca-conley/">Rebecca Conley</a>. They'll conduct it here at Astro Code School on Saturday May 30, 2015 from 4pm to 8pm. For more information and to RSVP please join the <a href="http://www.meetup.com/pyladies-rdu/">Pyladies RDU meetup group</a>.</p>Astro Launch Party2015-04-17T17:00:00-04:00Brian Russelltag:astrocodeschool.com,2015-04-17:blog/launch-party/<p><a href="http://astro-caktus.eventbrite.com" border="0"><img src="/static/img/_c_and_a_open-03-03-600px.png" class="left"></a></p>
<p><strong>RSVP</strong>: <a href="http://astro-caktus.eventbrite.com">astro-caktus.eventbrite.com</a><br>
<strong>What</strong>: Astro Code School Launch Party<br>
<strong>Where</strong>: <a href="https://goo.gl/maps/I8LlT">108 Morris Street, Suite 1B, Durham, NC 27705</a><br>
<strong>When</strong>: May 1, 2015, 6pm - 9pm</p>
<p>You are invited to the Astro Code School launch party! We’ll have light refreshments and opportunities to meet the fine folks at Astro and <a href="http://www.caktusgroup.com">Caktus Consulting Group</a>. Come learn more about the first full-time code school to specialize in Python and Django on the East Coast!</p>
<p>Please RSVP at the URL above. I hope you can make it!</p>Astro at PyCon 20152015-04-10T10:00:00-04:00Brian Russelltag:astrocodeschool.com,2015-04-10:blog/astro-pycon-2015/<p>Hello from Montréal, QC! We're here participating in the annual North American <a href="https://us.pycon.org/2015/">2015 Python Conference</a>. </p>
<p>So far Caleb has helped out at the <a href="https://us.pycon.org/2015/events/django_girls_workshop/">Django Girls Workshop</a> with three other Caktus Group colleagues. </p>
<p><img src="/static/img/CalabCoaching-DjangoGirls-PyCon2015-600px.jpg" alt="Caleb teaching at the Django Girls workshop at PyCon2015" class="left"></p>
<p>I went to the PyCon <a href="https://us.pycon.org/2015/events/edusummit/">Education Summit</a>. Great to see folks from around the world, including North Carolina, share cutting edge education ideas. Lots of amazing K-12 and University examples of how Python is teaching programming.</p>
<p><img src="/static/img/Caleb+Brian-PyCon2015-600px.jpg" alt="Caleb teaching at Django Girls Workshop at PyCon 2015" class="left"></p>
<p>We're now hanging out at the Expo telling folks from around the world about Durham and our school. So far I've met people from Poland, Canada, India, Hawaii, and lots of US States. Very fun to represent for North Carolina.</p>PyCon 2015 : See You in Montreal!2015-04-03T10:00:00-04:00Brian Russelltag:astrocodeschool.com,2015-04-03:blog/pycon-2015-see-you-there/<p><img src="/static/img/DontCrossMe-horz-600px.jpg" tite="Don't Cross me Stickers" class="left"></p>
<p>Caleb Smith and I are going to Montréal, Quebec, Canada next week for <a href="https://us.pycon.org/2015/">PyCon 2015</a>! It's a huge conference all about the open-source Python programming language. Python is a big part of what we teach here at Astro Code School.</p>
<p>We’ll be at booth #613 in Exhibit Hall 210 in the Palais des Congres. Please come look for us. We’ll have the usual swag like t-shirts for women and men. PLUS we’ll have the very addictive game Ultimate Tic Tac Toe. Play against one another on our big touch screen. It’s harder than it sounds. Will you be a <a href="https://twitter.com/CaktusGroup/status/581217944358785024">Ultimate Tic Tac Toe champion</a>? Can we win more games than Caktus Group?</p>
<p><img src="/static/img/tic-tac-toe-Cakti-600px.jpg" class="left"></p>
<p>Caleb is co-presenting with our <a href="http://www.caktusgroup.com">Caktus</a> colleagues on Wednesday April 8 from 3:30 p.m. - 5 p.m on <a href="https://us.pycon.org/2015/schedule/presentation/479/">Building SMS Applications with Django</a>. He’s also coaching at the <a href="https://us.pycon.org/2015/events/django_girls_workshop/">Django Girls Workshop</a> April 9. No programming experience required. Just bring a laptop and some energy to learn. You’ll be going through the awesome <a href="http://tutorial.djangogirls.org/">Django Girls tutorial</a>.</p>
<p>I’ll be attending the <a href="https://us.pycon.org/2015/events/edusummit/">Python Education Summit</a>. I’m really looking forward to learning more from other professional and amateur python educators. The <a href="https://us.pycon.org/2015/events/edusummit/schedule/">talk schedule</a> looks nice!</p>
<p>Are you going to PyCon 2015? What parts of PyCon 2015 are you looking forward too? Tutorial Days, Lightening Talks, or Dev Sprints? Let us know by tweeting at us <a href="http://www.twitter.com/astrocodeschool">@AstroCodeschool</a>.</p>Meet Caktus CTO Colin Copeland2015-03-27T11:30:00-04:00Brian Russelltag:astrocodeschool.com,2015-03-27:blog/meet-caktus-cto-colin-copeland/<p><img src="/static/photo/Colin-Copeland-600px.jpg" title="Colin Copeland, CTO" class="left"></p>
<p>This is the third post in a series of interviews about the people at Astro Code School. This one is about Colin Copeland the CTO and Co-Founder of <a href="http://www.caktusgroup.com/">Caktus Consulting Group</a>. He’s one of the people who came up with the idea for Astro Code School and a major contributor to it's creation.</p>
<p><strong>Where were you born?</strong></p>
<p>Oberlin, Ohio</p>
<p><strong>What was your favorite childhood pastime?</strong></p>
<p>Spending time with friends during the Summer.</p>
<p><strong>Where did you go to college and what did you study?</strong></p>
<p>I went to <a href="http://www.earlham.edu/">Earlham College</a> and studied Computer Science.</p>
<p><strong>How did you become a CTO of the nation's largest Django firm?</strong></p>
<p>I collaborated with the co-founders on a software engineering project. We moved to North Carolina to start the business. I was lucky to have met them!</p>
<p><strong>How did you and the other Caktus founders come up with the idea to start Astro Code School?</strong></p>
<p>Caktus has always been involved with trainings and trying to contribute back to the Django community where possible, from hosting Django sprints to leading public and private Django trainings on best practices. We're excited to see the Django community grow and saw an opportunity to focus our training services with Astro.</p>
<p><strong>What is one of your favorite things about Python?</strong></p>
<p>Readability. Whether it's reading through some of my old source code or diving into a new open source project, I feel like you can get your bearings quickly and feel comfortable learning or re-learning the code. The larger Django and Python communities are also very welcoming and friendly to new and long time members.</p>
<p><strong>Who are your mentors and how have they influenced you?</strong></p>
<p>So many, but especially my Caktus business partners and colleagues.</p>
<p><strong>Do you have any hobbies?</strong></p>
<p>I'm co-captain of the <a href="http://codefordurham.com/">Code for Durham Brigade</a>.</p>
<p><strong>Which is your favorite Sci-fi or Fantasy fiction? Why?</strong> </p>
<p>Sci-fi. I've always loved the books <a href="https://en.wikipedia.org/wiki/Neuromancer">Neuromancer</a> and <a href="https://en.wikipedia.org/wiki/Snow_Crash">Snow Crash</a>. Recently I've been enjoying the <a herf="https://en.wikipedia.org/wiki/Silo_(series)">Silo</a> science fiction series.</p>Meet Brian Russell Our Director2015-03-10T12:00:00-04:00Caleb Smithtag:astrocodeschool.com,2015-03-10:blog/meet-brian-russell/<p><img src="/static/photo/Brian-Russell-600px.jpg" title="Brian Russell, Director" class="left"></p>
<p>This is the second in a series of interviews about the people at Astro Code School. This one is about Brian Russell the Astro Code School Director. He's the guy who does day to day management and works to tell the world about the school.</p>
<p><strong>Where were you born?</strong><br />
I was born in Richmond, Virginia.</p>
<p><strong>What was your favorite childhood pastime?</strong><br />
Drawing with a pencil on paper. </p>
<p><strong>Where did you go to college and what did you study?</strong><br />
I went to Virginia Commonwealth University and earned a Bachelors of Fine Arts in Sculpture and Painting. The majority of my studio work involved creating video installation art. This was done using early non-linear video editing software to create short movies. Those movies were then displayed in sculpture that involved performance art and dance choreography.</p>
<p><strong>How did you go from being a fine artist to a director of a school?</strong><br />
It's a rather long and winding road. But after college I immediately started working as a graphic designer. This led to web design and development work. Later I started a business called Carrboro Creative Coworking and cut my teeth running a business. During that time I worked for many different corporations and several Universities doing tech support and teaching multimedia software. Technical literacy education is a real thread of interest in my career.</p>
<p><strong>What is one of your favorite things about Python?</strong><br />
I've really like Python's readability and how approachable that makes it. Plus the people I've met in the Python community locally and internationally are really cool.</p>
<p><strong>Who are your mentors and how have they influenced you?</strong><br />
Besides my art professors I've learned a lot from my accountant. Seriously, she's awesome! :)</p>
<p><strong>Do you have any hobbies?</strong><br />
I am an avid film photographer. Right now I'm deep into medium format film.</p>
<p><strong>Which is your favorite Sci-fi or Fantasy fiction? Why?</strong><br />
Science Fiction hands down. I've been a sci-fi geek ever sense I saw the "first" Star Wars in the theater. Plus I love William Gibson's writing and Star Trek. <a href="https://en.wikipedia.org/wiki/Vulcan_salute">LLAP</a>!</p>Meet Caleb Smith Our Lead Instructor2015-03-05T12:00:00-05:00Brian Russelltag:astrocodeschool.com,2015-03-05:blog/meet-caleb-smith/<p><img src="/static/photo/caleb-smith-1.jpg" title="Caleb Smith, Lead Instructor" class="left"></p>
<p>This is the first in a series of interviews about the people at Astro Code School. This one is about Caleb Smith the Astro Code School Lead Instructor. He’s the guy who writes our curriculum for our Python & Django Web Engineering class that he’s teaching this year.</p>
<p><strong>Where were you born?</strong><br />
I grew up in Hickory, in the piedmont of North Carolina.</p>
<p><strong>What was your favorite childhood pastime?</strong><br />
Programming DOS games in BASIC. I spent far too much time working on making an RPG I called "Water and Stone".</p>
<p><strong>Where did you go to college and what did you study?</strong><br />
I studied Music Education at <a href="http://www.uncg.edu/">UNC-Greensboro</a>.</p>
<p><strong>How did you get into Web Development with Python and Django?</strong><br />
After about two years of learning C++ and front-end web development on my own, I moved to the Triangle area hoping to find a role in the tech sector. I applied for the Caktus summer internship and was able to ramp up quickly thanks to some excellent mentorship from the team. I was hired on as a junior developer after that as my first professional job doing web development.</p>
<p><strong>What did you do professionally before becoming a web developer?</strong><br />
I taught elementary music K-5 in Asheville, North Carolina for two years. I found public school teaching really rewarding but difficult. I spent a lot of my free time doing hobby programming until deciding to pursue programming professionally.</p>
<p><strong>What is one of your favorite things about Python? What about Django?</strong><br />
I like the readability of Python the most and I also appreciate that it is well designed but practical considerations are allowed to trump purity. It makes for a really nice language and system to work in. I like that Django makes so many details of web development irrelevant because it abstracts over them well and is also careful about correctness and security concerns.</p>
<p><strong>Who are your teaching mentors and how did they influence how you teach?</strong><br />
I learned the most from Dr. Randy Kohlenburg, my trombone teacher at UNC-Greensboro. Dr. Kohlenburg thinks a lot about pedagogy and taught us a lot about how to apply those ideas in our own teaching. He's the best mentor I've ever had.</p>
<p><strong>Is there a connection between music and computer programming for you?</strong><br />
When I was about 12 I became really interested in music, joined band, and pursued music education in college. While taking music theory courses, especially in post-tonal analysis, I thought of ways to automate the work involved. I wrote some simple BASIC programs to help double check my work. I rewrote this later in C++ and yet again in Python, which I eventually released as the <a href="https://pypi.python.org/pypi/sator/0.2">sator library</a> on PyPI. Through this work, I realized that I had a strong interest in programming that went beyond my initial interest of making games as a kid.</p>
<p><strong>Do you have any hobbies?</strong><br />
I still play trombone and guitar when I can find the time. I've recently been trying to pick up <a href="https://www.youtube.com/watch?v=hV8EJOvvPvY">khoomei</a>. (Editor: A type of throat singing.) I'd like to eventually do something with programming and electronic music.</p>
<p><strong>Which is your favorite Sci-fi or Fantasy fiction? Why?</strong><br />
Sci-fi. "Dune" and "<a href="https://en.wikipedia.org/wiki/Neuromancer">Neuromancer</a>" are two of my all-time favorites, and some recent works like "Leviathan Wakes" are great reads too. Good science fiction captures my imagination of where society might be leading in ways that fantasy doesn't, but I do like it too.</p>Seven Features an Introductory Programming Language Should Have2015-03-01T10:00:00-05:00Caleb Smithtag:astrocodeschool.com,2015-03-01:blog/seven-features-an-introductory-programming-language-should-have/<p><img alt="Python Logo" src="/static/img/python-logo.png" /></p>
<p>Python has recently supplanted Java as the most popular introductory
teaching language at top U.S. universities. There are many articles
covering this fact from the perspectives of computer science faculty at
major universities. I wanted to take a moment to add my own thoughts on
the subject.</p>
<p>There are several key features of Python that make it more suitable as an
introductory language compared to Java:</p>
<ol>
<li>
<p>A more gradual learning curve</p>
</li>
<li>
<p>Object-oriented programming is not required</p>
</li>
<li>
<p>Designed for readability</p>
</li>
<li>
<p>Less verbosity and boilerplate</p>
</li>
<li>
<p>An interactive shell for exploratory development</p>
</li>
</ol>
<p>I'd like to tease out each of these points. While both languages can be
used to write large and complicated programs, the path from an empty
directory to a simple and working program is much more straightforward in
Python.</p>
<p>Programmers with little experience can use Python to do simple tasks such
as web scraping within a few days or weeks of using the language. There
are advanced concepts to learn, but the learning curve is more gradual
because more can be accomplished in Python with only simpler, more
foundational concepts such as variables and control flow.</p>
<p>Courses that use Java as the teaching language focus heavily on
object-oriented programming (or "OOP"). While Python is also
object-oriented, it is a multi-paradigm language that can also be used
with the functional or structured programming paradigms. While it is
important to learn OOP eventually, many learners catch on more quickly to
the more concrete structured programming paradigm. It is my view that
learning about OOP in the level of detail needed to write a Java program,
before completing several small programs that work, is a pedagogical
mistake that fundamentally puts these steps out of sequence. i.e.
A learner should first write small programs before approaching the
techniques and concepts used for writing larger ones well.</p>
<p>Furthermore, Python was designed with readability in mind, and is known
for mimicing pseudo-code more closely than other programming languages.
Learning the keywords and syntax needed for Java programming obfuscates
the overall goal of an introductory course; to teach fundamental
programming concepts that surpass a given language or problem domain and
enable the learner to obtain key insights that will continue to serve them
as they learn more computer science and software engineering concepts.</p>
<p>Lastly, like many other languages, Python features an interactive shell
that allows the programmer to try small bits of code at a time and to
explore the program being developed from within. This shortens the
feedback loop of trying out new ideas compared to having separate compile
and run steps. The advantages of an iterative approach with a quick
feedback loop for a beginner should be obvious.</p>
<p>With all of this in mind, I find it hard to imagine how Java ever became
a common introductory language at all. Explanations for this usually
center around the importance of object-oriented programming and the
ubiquity of Java in the industry. While these are both good reasons to
learn Java, possibly even as a second language, they are far from
convincing for the purpose of introducing programming.</p>
<p>I would argue that the features of an introductory programming language
are:</p>
<ol>
<li>
<p>A shallow learning curve</p>
</li>
<li>
<p>A clear and consistent language design</p>
</li>
<li>
<p>Many libraries available for a variety of needs</p>
</li>
<li>
<p>An interactive environment such as a shell</p>
</li>
<li>
<p>Light on clutter, boilerplate or superfluous details</p>
</li>
<li>
<p>An obvious path toward creating small and simple programs</p>
</li>
<li>
<p>A rapid rate of development</p>
</li>
</ol>
<p>I've outlined how Python meets most of these points already. On the point
regarding libraries, in this regard I think Java and Python both feature
a rich ecosystem for beginners and experienced programmers alike. However,
considering all of these points, I think a number of languages are more
appropriate as an introductory teaching language than Java, including at
least the following:</p>
<ol>
<li>
<p>JavaScript</p>
</li>
<li>
<p>Ruby</p>
</li>
<li>
<p>Scheme</p>
</li>
</ol>
<p>This brings to mind a much more interesting and difficult question. What
makes Python a more appropriate first language than each of these? I'll
leave this to a future blog post because I think it needs careful and long
form comparisons.</p>
<p>I hope to have made clear why I'm glad that major universities are making the
shift to Python for introductory courses. In the future, I hope to broaden this
argument and describe how Python is the best first language to learn.</p>