Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

The Two Cultures of Programming

In 1959 C.P. Snow's famous lecture, "The Two Cultures", decried the failure of educated people in the sciences and humanities to work together. Today we have a similar divide opening between those who write software for science and those who write it for "everything else". In this talk, we'll review the current state of affairs and look at what Julia might do to remedy the situation. The hope is that Julia can be a great programming language not just for science, but for programmers everywhere.

  • Login to see the comments

  • Be the first to like this

The Two Cultures of Programming

  1. 1. The Two Cultures Joshua Ballanco, Ph.D. ‸ of Programming
  2. 2. Are you: ✔ a Scientist ✔ a Programmer ✔ tired from all the Linear Algebra
  3. 3. Background • 1991 – Learn to program (age 11) • 1996 – Recompile Linux kernel • 1998 – Do something with Linux other than recompile a kernel • 2002 – B.S. in Chemistry • 2008 – Server Software Engineer at Apple • 2012 – Ph.D. in Chemical Biology • 2013 – Software Engineering Consultant • 2014 – Discover Julia
  4. 4. Background Science Programming
  5. 5. What’s this about? Thesis “A good scientific programming language will also be a good general purpose programming language.”
  6. 6. What’s this about? Question Do scientists and programmers program differently?
  7. 7. History 1959
  8. 8. History • The Two Cultures • Science • Humanities
  9. 9. History • English perspective • Humanities look down on the sciences… • But humanities could benefit from scientific method
  10. 10. History • American perspective • Scientists reject need for study of humanities… • But scientists could benefit from improved communication skills
  11. 11. History • Humanities – Understand humans and our interaction with the world • Sciences – Discover the immutable laws that govern nature • Both – Seek to increase the wealth of human knowledge
  12. 12. Scientists vs Programmers • Tooling • Version Control • Editors/IDEs • Debuggers http://biorxiv.org/content/early/2016/05/13/048744
  13. 13. Scientists vs Programmers • Code Organization Rails CellProfiler SLOC: 209114 SLOC: 147512
  14. 14. Scientists vs Programmers • Priorities “Yet we should not pass up our opportunities in that critical 3%.” “We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.” – Donald Knuth
  15. 15. Programmers = Humanities? https://www.youtube.com/watch?v=9LfmrkyP81M
  16. 16. Programmers = Humanities? https://www.dreamsongs.com/MFASoftware.html
  17. 17. The Two Cultures • Scientists – Programming is a tool to generate interesting results • Programmers – Software is an artifact that should be crafted with care • Both – Make the computer do stuff!
  18. 18. Why do I care? 0 700 1400 2100 2800 3500 NumPy SciPy Rails 1000x Lines of Code Contributors
  19. 19. Why do I care?
  20. 20. Why do I care? http://www.economist.com/news/science-and-technology/21695377-professors- unprofessional-programs-have-created-new-profession-more
  21. 21. Why do I care? Julia can be the language that unifies science and programming
  22. 22. How? • Pkg.generate() • Readability • Array indexing • Testing • REPL
  23. 23. How? • Pkg.generate() • Brilliant! • Embraces the importance of community • What about Project.generate()?
  24. 24. How? • Readability • Unicode operators? Brilliant…sometimes! • “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” – Martin Fowler
  25. 25. How? • Array indexing • Arbitrary indexing? Brilliant! • “1-based indexing…eww!” • “I don't know how many of you have ever met Dijkstra, but you probably know that arrogance in computer science is measured in nano- Dijkstras.” – Alan Kay
  26. 26. How? • Testing • Julia: @test, @test_throws • Ruby:
  27. 27. How? • REPL • Shell? Help? C++?!? Brilliant! • REPL as exploration vs REPL as dev tool • workspace()? Brilliant! • method redefinition… boo! (Infamous #265)
  28. 28. How? You!
  29. 29. Joshua Ballanco jballanc@gmail.com https://github.com/jballanc @manhattanmetric Thank You!

×