Tools of Software Craft
Any craftsman is as good only as the tools at his disposal and the craft of software development is no different. To produce his best efforts, he should have the best tools that he can afford.
Any craftsman is as good only as the tools at his disposal and the craft of software development is no different. To produce his best efforts, he should have the best tools that he can afford. Fortunately, in software industry, some of these best tools are free.
If you are on the search for a tool, know that no tool or framework is so comprehensive to cover an exhaustive use-cases. So whatever choices you make, it is likely that you will encounter someone from the anti-camp. Hear their arguments, just be sure of your requirements. Otherwise you will waste your time in search of the best tool!
While we are at it, here is a related point: since no tool can meet all your requirements, you may have to learn another tool.
With that said, here is a list of the tools I've acquired and use:
Computer Environment: You might buy the best tools but if you have to run them on a lousy computer, your productivity is still hampered. I have been using a MacBook for the past three years and I don't regret the investment. Why? Because it just works. Do yourself a favor and get the best computer you can buy.
Programming Language: Another important choice for software developers is the programming language, since you have to literally live with it. Of all the languages I have used, I prefer Python. It is simple, hence easy to learn; it has got great community around; got many frameworks for both desktop and web development; and an added advantage of a simple programming language is that when you return after a break, you can quickly pick-up and move fast.
Virtual Environment: Without an virtual environment, changes you make impact the main installation, sometimes disturbing the system behavior. Virtual environments give you the flexibility of experimentation & isolating your experimental changes.
Wireframe Sketchers: It is better to visualize the design before writing a single line of code. That will limit the cost of changes later. I play around with many desktop-based & web-based tools for wireframe but I keep returning to pencil (the real paper & pencil and the simple Pencil extension for Firefox)
IDE/Text Editor: Integrated Development Environments are packaged with tons of tools to assist software development. But, I find them bloated for a Python based web development. A text editor meets almost all requirements of python based web development.
Frameworks: Frameworks provide a means for all the common activities of software development like UI design, events controllers, DB access and session management (in case of web apps). That said, frameworks can also be restrictive, so ensure the frameworks support the use-cases you have in mind.
Source Control: It is suicidal to start software development without a source control tool, even for a solo-developer development (like me). There is an associated benefit of using a source control system: using commit comments, you can keep track of your progress in implementing features & fixing bugs.
Bug / Issue / Features Database: Bugs & features should be collected in a single bucket rather than being littered in papers or in text files. Most of the version control systems provide a bug tracking system too.
I use the bug / issue database that comes along with Bitbucket.
(Automated) Testing Tools: after a certain threshold, it is impossible test all features manually. you should automate as much as possible and resort to manual testing only for those aspects that need to be tested manually like look & feel of the application. There is a whole lot of testing tools available depending on the aspects of testing, for example functionality testing and load testing.
I don't have a choice or a preference when it comes to automated testing tools. I've used Python unit-testing, Selenium and now learning Robot Framework. But I'm still on the look out for a better (read one that makes functional & load testing easier) testing tool.