The last couple of weeks Mike Grouchy and I have been talking about the python newsletter that we would want to recieve weekly. A curated collection of the best python news, articles and projects from around the internet delivered to your inbox in a beautiful package weekly.
If you have created some content or run some project that you think should be in Pycoders Weekly contact Mike or me and let us know.
Everyone is thinking why in the world would anyone pick static, when you can be dynamic, so much more agile bro. Usually the thought process is what language am I most proficient in, that can do the job. Totally not a bad way to go about it. Now does this choice affect anything else? Testing? Speed of development? Robustness?

Dynamic vs. Static
Dynamic languages are languages that don’t necessarily need variables to be declared before they are used. Examples of dynamic languages are Python, Ruby, and PHP. So in dynamic languages the following is possible:
We have successfully assigned a value to variable without declaring it before hand. Simple enough, try doing this in Java (you can’t). This can *increase* development speed, without having to write boilerplate code. This can somewhat be a double edge sword, since dynamic languages types are checked during runtime, there is no way to tell if there is a bug in code until it is run. I know you can test, but you can’t test for everything. You can’t test for everything. Here is an example albeit trivial.
Now if you are raging to some serious dubstep, its easy enough to miss that small typo, you go screw it and do it live, and deploy to production. Python will simply create the new variable and not a single thing will be said.
Only you can stop bugs in production!
Static languages are languages that variables need to be declared before use and type checking is done at compile time. Examples of static languages include Java, C, and C++. So in static languages the following is enforced
Many argue this increases robustness as well as decrease chances of Runtime Errors. Since the compiler will catch those horrible horrible mistakes you made throughout your code. Your methods contracts are tighter, downside to this is crap ton of boilerplate code.
Weak and Strong Typing can be often be confused with dynamic and static languages. Weak typed languages can lead to philosophical questions like what does the number 2 added to the word ‘two’ give you? Things like this are possible with a weak typed language.
Traditionally languages may place restriction on what transaction may occur for example in a strong typed language adding a string and integer will result in a type error as shown below.
Conclusion
Regardless of where you land on this discussion, claiming one is better than the other would lead to flame war, but there are places where each is strong.
Dynamic languages are good for fast quick development cycles and prototyping, while static languages are better suited to longer development cycles where trivial bugs could be extremely costly (telecommunication systems, air traffic control).
For example if some giant company called Moo Corp. spent millions of dollars on QA and Testing and a bug somehow gets into the field, to fix it would mean another round of testing. When sitting in that chair the choice is clear static languages FTW, its a hard job but someone has to milk the cows.
Test, test, and test.
Just a little food for thought, for when you are starting your next project. You never know what limitations you maybe placing on yourself and your team.
What do you do consider when selecting a programming language for a project?
Discussion
There has been this trend of developers sharing there development set ups. I thought it might be cool to share the tools I use during development. Maybe even get some of my friends to share the tools they love to use during development. Hopefully, I can turn you on to some cool programs or equipment.
Hardware
I am constantly on various virtual machines both at work and home. At work we have several machines that we use for visualization the host system for those is Debian Squeeze. We use KVM for our virtualization solution, its quite awesome. The main benefit is having tight integration to the hardware is being run which gives us the biggest bang for our buck. Plus it comes with a nice dashboard for checking hard drive space and memory/cpu usage on each virtual machine. For local development I use VirtualBox and Vagrant for spinning up web development machines, this is ideal for having the same development environment as co-workers and being able to spin them up/down quickly and reliably.
My main desktop machine at home is a gaming machine; I built a few years ago. Nothing to brag about right now. I dual boot Windows 7 (gaming), and Ubuntu 10.10 Maverick the last update until they added that abomination called Unity, although I hear its getting better. I have two Samsung SME2320 23’ High Definition screens, which certainly get the job done for both work and leisure.
I recently purchased two KRK Rokit 5 studio monitors, which simultaneously brought out the sound quality snob in me.
Is this FLAC?
These speakers are awesome, you can hear every detail in every song. These will definitely get your neighbours Wub Wubin’ to the beat.
I am not usually too far away from one of my desktops, but when I am I use 13” Macbook Pro (8 GB), I really have been fighting the urge to get an SSD for now, I can see this changing quickly. I hate doing any real development on this machine, I have been babied by having two screen everywhere and being crouched over a laptop isn’t something I find comfortable or productive.
For reading I have a Kindle which is awesome for fiction, I still find myself buying hard copies of all my reference books though. They still haven’t found a good way to earmark pages like I can with a real book. No iPad, thankfully. I have an iPhone 4s and before that Google Nexus S. Its really like Coke and Pepsi to me.
I totally just lied there, I love Pepsi so much more.
Coke is just slightly ahead at the moment. There are things I love about both OSes, but I don’t claim one to be better than the other.
Software
I write code in several languages mostly bouncing between Python and Java. I hate the fact I have different coding setup for each, right tools for the job, I guess. For general file editing and Python development I use Sublime Text, it’s cross platform and awesome editor written in Python. When I am not there and writing C or Java code I am usually in Eclipse. I use git for version control, mostly hosted on Github. I keep trying to move to Vim full time, I will eventually get there.
For web development I use Django, because its awesome. I have been playing with Flask more and more, I like it, simple clean, easy to read. I am getting more into this JavaScript, starting to slowly love it. Usual suspects here, Node.js and jQuery.
I am in the terminal quite a bit I use TotalTerminal on the OS X machine, and Terminator on the Ubuntu machines. For my shell I use zsh, it changed my life.
For music, I will forever be loyal to Grooveshark, the selection is just better, the app is fairly priced, and beautiful application all round. I have tried Rdio, but it is simply lacking in selection and compensates by providing horrible covers instead, which is pure bullshit. I don’t keep a whole lot of music on my machine, I don’t really see the point EVERYTHING is on the internet.
For chat I use Empathy or Adium, mostly logged in through Gtalk. Google Chrome for browsing and Gmail for email. I have a Bamboo Connect for little webcomics.
For media, I have an jail broken Apple TV w/ Plex. I use the service that shall not be mentioned for downloading data ;). Message me if you didn’t get that last comment.
Dream Machine
If practicality and expense were thrown out the window, this would be the machine I would get.
If we are talking reasonable, I would like to get a couple 27” Apple Thunderbolt Display for pure development awesomeness. I would love to get this microphone for audio recording, I always wanted to take my shot at being a radio disk jockey.
This next song is going out to all the broken hearts out there.
I am actually not that far away from what I actually need. Little bit more desk space wouldn’t hurt either.
As long as were asking for things, a more beautiful Ubuntu, and a better development Windows.
Discussion
Thursday, January 26, 2012
I’ve been working on a new design for the blog, as you guys all should know since you’re following me on twitter right? RIGHT? I have officially released it tonight.
Expect much more writing than you guys have been seeing as of late. I hope to be writing a lot more articles; rather than sharing random quotes and pictures, hope the design reflects that intention. So expect a big one hopefully at least once a week.
I would love to know what you think of the new design and if you can find anything broken please let me know!
I will adding the contact page back soon. Stay tuned.
Discussion