I want to work in a company which (or “Yet another random business rant”)
Posted in personal on June 22nd, 2010 by Alain M. LafonThis is going to be a random rant on a random companys’ policies and employees – there is no direct connection to me whatsoever, of course.
I want to work in a company that doesn’t abuse its SCM as a file server.
If you can’t do full backups anymore, because your file system can’t handle the big dump file, you’re seriously doing something wrong! Well, maybe you are Google and have a quadzillion LOC – or you’re just committing all your crappy binaries together with those nice MS Office files. If you don’t know how your SCM works or even what it was made for, then RTFM!
I want to work in a company in which employees don’t mistake different tool sets for one another.
GForge, Trac, EGroupware, Hudson, OTRS – they are not the same! And c’mon, you can differentiate between all those lame Office products, so I know you can do it! Ah, but I forgot – those strange OSS products, they are not business proof and will not withstand time. So be it, then. Use Outlook and Excel for your project management, but don’t come asking the programmers why they can’t do five projects at a time.
I want to work in a company in which I can call fellow programmers just that: programmers
There astonishingly many paid software engineers out there who don’t even know how to use a single text editor (“No, Notepad is _not_ a text editor, it’s a disgrace!”) or how to do a simple RegExp. Or worse – some don’t just lack the knowledge on how to do a RegExp, they despise them (“Those things are only needed by scientists, I’m just a programmer.”).
Honestly, how can you spend your whole day manipulating text without basic knowledge of any helpful tool? Nobody would call someone building a sky scraper a master craftsman if he only used a hammer, because that’s the only tool he knows. He would be nothing but a cheap menial worker.
I want to work in a company where I can tell fellow programmers jokes about funny (i.e. particularly bad) code.
If I show somebody a for loop which counts up files and makes that counting “persistent” by reading and then saving every step in a ini file – I don’t want their answer to be: “Well, [language] code can sometimes look like this.” No it doesn’t, you numbnuts! If you don’t know the difference between count++ and one A4 page of shithole code, then don’t call yourself programmer, buddy! No language in the world encourages such crazy thinking (not even Brainfuck does). This problem is called missing brain matter.
I want to work in a company in which fellow programmers know the difference between programming languages and are able and willing to choose the right one for the task at hand.
If something like MS VC++ is enforced on every project – even those tedious clean-up jobs that could be simple Bash scripts (if only you had a Unix environment), then all you will get is dirty spaghetti code and unmaintainable hacks. And all that for the benefit of the doubt that this code will probably crawl your file system faster than if you had used a scripting language (which have originally been created for.. well.. scripting tasks).
Anyway, good for you that you paid your developer 20 times the money you would have needed. Well, if you let him chose a more suitable tool. At least you have your possible speed gain of a couple of seconds at runtime (because that’s where the costs are hidden today, baby!).
I want to work in a company which doesn’t establish coding and style guidelines across different languages.
There are people out there, even programmers, who tend to believe that choice of a language is either pure chance or the cause of some kind of trend. They also believe it is good reasoning to enforce a style guideline across languages to make the developers transition between languages easier.
Well.. I don’t even know what to say to that one. If people really believe that dynamic code should look the same like static code – and that what is considered to be good style in Java is therefore also good style in Python, then I can only say: May your gods be gentle to you, my friend. I can’t help you anymore.
I want to work in a company that doesn’t establish project management with a team of people using “code freeses” to make “relaises”.
If your testing, support and project teams don’t know shit about any software development paradigms, then don’t bother letting them stay in the way of your developers. It will only cause bloat and longer release cycles coupled with decreased quality. Ah, and you will piss off your developers.
I want to work in a company whose “business best practices” are at least updated once a decade while always being open to debate in case of doubt.
If you stick to the same patterns over and over again, because they have worked for you in the past – without adapting to the new world outside, you will be obsolete. Besides, that attitude gets you WinXP.
I want to work in a company which doesn’t enforce WinXP for development _and_ production servers.
That one should be obvious. But anyway, WinXP being as obsolete old as it is, it should not only be not enforced, but proactively outcast!
I want to work in a company in which people do not think that software can only be robust, secure and scaling when it needs all the resources it can harvest.
I’m looking at you Microsoft random.choice(product_names)!
It doesn’t always have to be a J2EE or SOAP XML/RPC solution for web apps. You won’t need MS SQL Server for any smallish application.There is no need to walz with hardware requirements that would have meant buying a cluster a few years ago for. Not only will the hardware cost you, but those 20 year old programming paradigms will bring you down – sooner or later. There’s a lot of (free) software around that will probably let you do your job faster (less code), cheaper (less time spent programming), more scalable (OSS tends to embrace open standards), it will probably even be fun to use!
I want to work in a company which company doesn’t just want to be ISO certified, but has a pragmatic approach to a common rule set of style, collaboration and quality.
What good is it really to do the minimum necessary to achieve ISO greatness? All it gets you is more incompetent paper pushers slowing you down and costing you good money. If your company is big enough for ISO, then it’s also big enough to establish pragmatic guidelines on programming, testing and support for your product. Better take that chance as long as you still can!
Last, but certainly not least, I want to work in a company where fellow programmers don’t tell me phrases similar to
“Every company has these problems.” and
“Don’t argue with yourself, it’s only a job – it and earns you the rent.”
In the last statement I see the source of the “problems” – indifference to the company and to computer science will teach you only one thing: Incompetence. And from incompetence concludes everything that goes bad in everyones’ job.
When I come home from work, I don’t stop being an engineer, because it’s after hours. When I come home from work, I switch on my computer, I visit Hacker News, I try to learn a new language, I read a book on computer science, I surrender myself to a nifty project. I don’t work as a coder for the money, I do it because I love computer science as I always have. I live and breathe geeky stuff – that’s the way I am and I want my fellow programmers to be.
Probably the only thing I can think of that I proactively hate is incompetence. So don’t bother me with your hobgoblin reasoning, I really had enough of it. If you “just want to earn your rent”, then so be it. But don’t try to assume that everyone should be a menial worker just like you are. My time is precious, too, my friend. It’s not always the middle managements’ fault if we, the programmers, don’t know any better. Then how should the guy leading your project? You should be the one to inform him on current “best practices”. He’s probably just a business guy – he will do as you say if he trusts you. And if he doesn’t, then either you’re incompetent yourself or your job position sucks – then get the hell out of there!
Ah, by the way: I do have a life besides computers, I have a gorgeous girlfriend (hey Katrin^_^), I care for my family, I study to get my degree and sometimes, just sometimes I even go out. But as I said in the beginning: this is just a random rant on a random companys’ policies and employees which is in no way related to myself.
VIM as Python IDE
Posted in articles on May 24th, 2009 by Alain M. LafonFinding the perfect IDE for Python isn’t an easy feat. There are a great many to chose from, but even though some of them offer really nifty features, I can’t help myself but feel attracted to VIM anyway. I feel that no IDE accomplishes the task of giving the comfort of complete power over the code – something is always missing out. This is why I always come back to using IDLE and VIM. Those two seem to be best companions when doing some quick and agile hacking – but when it comes to managing bigger and longer term projects, this combo needs some tweaking. But when it’s done, VIM will be a powerful IDE for Python – including code completion(with pydoc display), graphical debugging, task-management and a project view.
This is where we are going:
So, these are my thoughts on a VIM setup for coding (Python).
Modern GUI VIM implementations like GVIM or MacVIM give the user the opportunity to organize their open files in tabs. This might look convenient, but to me it is rather bad practice, because a second tab will not be in the in the same buffer scope as the first one which takes away from future interaction options between the two. Using MiniBufExplorer, however, gives the user tabs(not only in the GUI, but also in command line) and leaves the classic buffer interaction intact.
Being able to neatly work on multiple files, the user still misses the potential his favourite IDE gives him in visualizing classes, functions and variables. Luckily there are quite a few plugins around to accomplish this task just as well. My favourite one would be TagList. TagList uses Exuberant Ctags for actually generating the tags(note: it really relies on this specific version of ctags – preinstalled implementations on UNIX systems won’t work).
A lot of coders have the habit of using TODO or FIXME statements in their code. Other IDEs often rely on having good third party project management software, but not VIM. There are great plugins like Tasklist reminding the programmer of those lines of code. Tasklist even implements custom lists – to me that’s an incredible productivity gain.
In these times, the programmer knows his or her programming language more or less by interactively finding out what it can do. Therefore code completion(sometimes also called IntelliSense*ugh*) is a major feature. I have heard many people saying that this is where VIM fails – but luckily they are plain wrong(; In V7, VIM introduced omni completion – given it is configured to recognize Python (if not, this feature is only a plugin away) Ctrl+x Ctrl+o opens a drop down dialog like any other IDE – even the whole Pydoc gets to be displayed in a split window.
Probably the most wanted feature(besides code completion) is debugging graphically. VimPDB is a plugin that lets you do just that(. I acknowledge it is no complete substitution for a full fledged graphical debugger, but I honour the thought that having to rely on a debugger (often), is a hint of bad design.
–
From the eye-candy to the implementation. Don’t worry, it’s no sorcery.
First of all, make sure you have VIM version 7.x installed, compiled with Python support. To check for the second, enter :python print “hello, world” into VIM. If you see an error message like “E319: Sorry, the command is not available in this version”, then it’s time to get a new one. If you’re on a Mac, just install MacVIM(there’s also a binary for the console in /Applications/MacVim.app/Contents/MacOS/). If you’re on Windows, GVIM will suffice(for versions != 2.4 search for the right plugin). If you’re on any other machine, you will probably know how to compile your very own VIM with Python support.
Second, check if you have a plugin directory. In Unix it would typically be located in $HOME/.vim/plugin, in Windows in the Program Files directory. If it doesn’t exist, create it.
Now, let’s start with the MiniBufExplorer. Get it and copy it into your plugin directory. To start it automatically when needed and be able to use it with keyboard and mouse commands, append these lines in your vimrc configuration:
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
For a project view, get TagList and Exuberant Ctags. To install Ctags, unpack it, go into the directory and do a compile/install via:
./configure && sudo make install
Ctags will then be installed in /usr/local/bin. When using a Windows machine, I recommend Cygwin with GCC and Make; it’ll work just fine. If you don’t want to tamper with your original ctags installation, you can propagate the location to VIM by appending the following line to vimrc:
let Tlist_Ctags_Cmd='/usr/local/bin/ctags'
To install TagList, just drop it into VIMs plugin directory. You will now be able to use the project view by typing the command :TlistToggle.
Tasklist is a simple plugin, too. Copying it into the plugin directory will suffice. I like to have shortcuts and have added
map T :TaskList<CR>
map P :TlistToggle<CR>
to vimrc. Pressing T will then open the TaskList if there are any tasks to process. q quits the TaskList again.
VimPDB is a plugin, as well. Install as before and see the readme for documentation. If it doesn’t work out of the box, watch for the known issues.
To enable code(omni) completion, add this line to your vimrc:
autocmd FileType python set omnifunc=pythoncomplete#Complete
If it doesn’t work then, you’ll need this plugin.
My last two recommondations are setting these lines to comply to PEP 8(Pythons’ style guide) and to have decent eye candy:
set expandtab
set textwidth=79
set tabstop=8
set softtabstop=4
set shiftwidth=4
set autoindent
:syntax on
There are certainly a lot more flags to help productivity, but those will probably be more user specific.
Have fun coding Python while not being bound to a specific IDE, but having all the benefits of VIM bundled with a few helping hands. Enjoy, everyone.
If you liked this article, please feel free to re-tweet it and let others know.
|
You should follow me on twitter here |





