I have great faith in people. I believe that everyone deserves a chance to prove themselves. But if one fails... that's a different story.
In the past week I've been interviewing computer scientists for various jobs. Usually, I'm looking for those top 20%. It doesn't matter it they excel in programming, algorithmic thinking or other technical topics, only that they excel at something. I don't mind spending time at teaching the material required to successfully fulfill a certain job, only that the person would be one that I'd know I'm not completely wasting my time on. Some of the best computer scientists I know, haven't touched a computer until they started their degree (or even later), the others are programming since they were 10-years-old, and speak Java better than Hebrew. So there is no formula to find the best people for the job. This is why interviews aren't simple, for both sides. It is very important to ask technical questions from different fields of computer science, and also to test the way one is thinking. So the interview might be long, stressing, dynamic and tiresome. But those who made good impression would usually know that, since they'll have this good feeling inside them after leaving the interview. I'm not a bad person, but there are some people who made me (yes, they made me) ask them "So, why did you learn computer science?", in the end of the interview (such question at the beginning is legitimate and makes sense). Think about that.
Friday, December 28, 2007
Saturday, December 22, 2007
Reverse engineering
Every now and then I find myself reading source code of some of the commercial products we use at my office. I won't specify the products' names, but I will mention some of the biggest vendors are in the list. When it comes to open source software, there is nothing wrong with what I'm doing: I'm having a problem, Google doesn't help much, after some time I decide it'll be best to see how the problematic piece of software is written and after some more time, the issue is solved (and a patch suggestion is submitted). But, when it comes to commercial products, the process involves and extra stage: reverse engineering. Also, almost never a code-fix suggestion is sent to the vendor.
So, what do we reverse engineer at our office? Things that don't require much to "reverse", such as Perl and JSP (yes, vendors do supply these) and things that require decompiling, such as Java classes (usually packed inside archives of some sort). Most major software companies use these technologies, so after reverse engineering one's code, it's not difficult to do this for another. The problem begins when trying to understand how the code works, and where is the culprit. No matter if it's Java of Perl, such code is usually unreadable. Usually, few hours or so are required to make progress.
Here are some examples for reasons for what we do:
* Product installation fails with no obvious reason. This is where the vendor blames our environment, and we have to prove it the problems lies at their code.
* Some product's features are failing. See above.
* The product is badly documented, if documented at all. The only way to understand the way it expects inputs or using resources, is by finding the right place in the code.
* Some programming framework (which are usually open source, such as Struts), is misbehaving, or deeper understanding is required.
One final word about this topic: Every professional developer and a system administrator should be able to do such tricks. Otherwise, one will have to rely on answers found in Google, or worse, patches from the vendors, both of which might come too little and too late.
So, what do we reverse engineer at our office? Things that don't require much to "reverse", such as Perl and JSP (yes, vendors do supply these) and things that require decompiling, such as Java classes (usually packed inside archives of some sort). Most major software companies use these technologies, so after reverse engineering one's code, it's not difficult to do this for another. The problem begins when trying to understand how the code works, and where is the culprit. No matter if it's Java of Perl, such code is usually unreadable. Usually, few hours or so are required to make progress.
Here are some examples for reasons for what we do:
* Product installation fails with no obvious reason. This is where the vendor blames our environment, and we have to prove it the problems lies at their code.
* Some product's features are failing. See above.
* The product is badly documented, if documented at all. The only way to understand the way it expects inputs or using resources, is by finding the right place in the code.
* Some programming framework (which are usually open source, such as Struts), is misbehaving, or deeper understanding is required.
One final word about this topic: Every professional developer and a system administrator should be able to do such tricks. Otherwise, one will have to rely on answers found in Google, or worse, patches from the vendors, both of which might come too little and too late.
Monday, December 17, 2007
Legacy Horror
Were you ever ordered to debug an application written ages ago? Did the original programmer was still around? Did the users contributed any valuable info besides "it's not our fault" or "the other guy knew how to solve this"? Did you think that the people who wrote software in technologies which are now obsolete, are idiots or incompetent programmers (no offense)?
Well, since I'm writing these questions, you can guess what would be my answers. This week I got to work on an issue, in an application written before the turn of the century, for people who still thinks (!) they should solve every problem with VB and Oracle Forms. Of course the issue was critical, and the blame was on us - the IT and IS departments. After three days of hard working, and the complete waste of time of about 5 software developers, the issue was solved. And still, after solving the problem, we still don't know what caused it. Code just disappeared from the application. We consider it "voodoo", and blame ourselves that we gave the users complete control over the application, so they could destroy it by accident (they'll never admit that, and we cannot prove that).
Some would say I'm too harsh, or mistaken. These things happen, and they might be our complete fault. But I believe our only mistake was to let users continue to work on such legacy application.
What is the life span of software developed in-house? 7 years? 10 years? And what are the costs of prolonging legacy applications' life? which is better: to rewrite using modern methodologies, or to patch the software until computer architecture changes so dramatically, so the software simply wouldn't work?
I wish I had school answers. Now I remember why I hate in-house software development so much. Nothing good comes out of it. And when problems arise, it happens so many years after the software was written, that nobody knows how to solve them. So, the software costs money (and resources) when written, when fixed, when rewritten, and all over again.
Well, since I'm writing these questions, you can guess what would be my answers. This week I got to work on an issue, in an application written before the turn of the century, for people who still thinks (!) they should solve every problem with VB and Oracle Forms. Of course the issue was critical, and the blame was on us - the IT and IS departments. After three days of hard working, and the complete waste of time of about 5 software developers, the issue was solved. And still, after solving the problem, we still don't know what caused it. Code just disappeared from the application. We consider it "voodoo", and blame ourselves that we gave the users complete control over the application, so they could destroy it by accident (they'll never admit that, and we cannot prove that).
Some would say I'm too harsh, or mistaken. These things happen, and they might be our complete fault. But I believe our only mistake was to let users continue to work on such legacy application.
What is the life span of software developed in-house? 7 years? 10 years? And what are the costs of prolonging legacy applications' life? which is better: to rewrite using modern methodologies, or to patch the software until computer architecture changes so dramatically, so the software simply wouldn't work?
I wish I had school answers. Now I remember why I hate in-house software development so much. Nothing good comes out of it. And when problems arise, it happens so many years after the software was written, that nobody knows how to solve them. So, the software costs money (and resources) when written, when fixed, when rewritten, and all over again.
Friday, December 14, 2007
More than a cell phone
Recently I purchased a Nokia E65. This is my first smartphone. For sometime I knew I wanted a device that combines my cell phone (used to have a cell phone of every Israeli cellular telcom. at the same time), my MP3 player (had a Sandisk Sansa E140 which broke last week), a simple camera (to catch everyday events), a GPS (lost without it) and some gaming and office on-the-go (like a pocket PC). It's impressive to see how far mobile technology has advanced, since I can get all of the above (after buying a GPS antenna) in a single lightweight device.
After a day or two of using my new super-smart-phone, I decided to look for some extra software. This is where the story really gets better. There are thousands of applications written for S60 (the platform on which SymbianOS runs). Many of them are freeware/open source software. Simple googling finds everything, from games, such as Frozen Bubble, to applications, such as MySQL and a Python interperter. So i rushed and downloaded it all. Now my device is bloated with software I don't need, and applications I'll never use. But I'm happy.
A week after, I downloaded the SDK from Forum Nokia. It amused me to see they have a platform called MOSH (MObile and SHaring. which is also my nickname). Anyway, using the SDK, I can develop and sign application on my own, using one of my favorite programming languages - Java. Of course I plan to release these applications to the wild, with their source code. I just hope there are enough programmers out there, who are interested in helping developing software for S60.
After a day or two of using my new super-smart-phone, I decided to look for some extra software. This is where the story really gets better. There are thousands of applications written for S60 (the platform on which SymbianOS runs). Many of them are freeware/open source software. Simple googling finds everything, from games, such as Frozen Bubble, to applications, such as MySQL and a Python interperter. So i rushed and downloaded it all. Now my device is bloated with software I don't need, and applications I'll never use. But I'm happy.
A week after, I downloaded the SDK from Forum Nokia. It amused me to see they have a platform called MOSH (MObile and SHaring. which is also my nickname). Anyway, using the SDK, I can develop and sign application on my own, using one of my favorite programming languages - Java. Of course I plan to release these applications to the wild, with their source code. I just hope there are enough programmers out there, who are interested in helping developing software for S60.
Tuesday, November 27, 2007
Personal favorites
Recently I found out about Coding Horror. Since I enjoy reading it very much, I gathered some of my personal favorites, with some comments:
I recommend taking a spare hour and read those posts. All very interesting. Better, I recommend subscribing to the Coding Horror, as there is much more to read.
- The Two Types of Programmers - What did you do to make the programmers (and other computer-related folks) you know, closer to the 20%? I know I'm always trying to show everyone why it would be good for them to become experts, and to put the extra effort. Is it working? sometimes yes and sometimes no.
- Pair Programming vs. Code Reviews - We have very little in-house development compared to the amounts talked about in this post, but still, we use (unknowingly) a mixed method - some peer review (pair programming) and some code review. The peer review is much more enjoyable and educational, though sometimes more time-consuming.
- Don't Forget To Lock Your Computer - At our office we do this all the time. Sometimes humiliating the person forgetting to lock the computer. However, I was surprised to see that the tricks remain the same.
- Hardware Assisted Brute Force Attacks: Still For Dummies - I knew this would come one day. And still, I like the idea very much.
I recommend taking a spare hour and read those posts. All very interesting. Better, I recommend subscribing to the Coding Horror, as there is much more to read.
Friday, November 9, 2007
Kitty
Usually I hate cats. I can't help it, I'm a dog kind of person. Dogs are smart, loyal and more fun to play with. Anyway, last week I was driving to work, while a little kitty (no more than few weeks old) appeared right in front of my car. I must say it looked very confused, not knowing how to get off the road. Luckily, I was going about 30 KPH, so I maneuvered the car in a way that the kitty would be under my car (as opposed to under my wheels). Afterwards, I checked to see that it survived the almost-encounter with my car, though it still looked very much confused. I hope his mom came to the rescue...
Saturday, October 20, 2007
back to the sources
Recently I decided it's a good idea to try LFS. My goal was to teach myself about the way my OS works, how to compile an OS, the difference between distributions and to further understand the system initialization process. Also, I was quite bored (the universities in Israel strikes again). Since I care a lot about my own PC, I decided it'll be a good idea to try VirtualBox for the experiment. Since I'm a great VMWare fan, I have high expectations from my virtual machines. VirtualBox matched my expectations and even managed to surprise me. It works really fast, thanks to the trick they did with ring 1, performance is almost native.
As for the main issue, LFS is really not what I thought it was. The build is straight forward, and much less complicated than I thought it would be. Of course I didn't succeed the first time, and I got into trouble related to building gettext which uses the curses libraries. Never mind, the second build would be better...
As for the main issue, LFS is really not what I thought it was. The build is straight forward, and much less complicated than I thought it would be. Of course I didn't succeed the first time, and I got into trouble related to building gettext which uses the curses libraries. Never mind, the second build would be better...
Tuesday, October 9, 2007
In memorial of
Today I lost a dear friend, a colleague, a past team-mate and a source of inspiration. Dima Osherov was all of that, and then some. Unfortunately, we still do not know what awful disease causes the death of a 24 year old man.
Dima was a brilliant DBA and a sys admin, and nothing I can write would cover all of his talents and skills. I guess you had to know him.
So why a blog post as a memorial? Few months ago we decided it would be best if we start a shared-blog about Oracle, technologies and other common interests. As it seems, this blog will never be created, so I think a post about Dima would put his name in the blogsphere, and fulfill a dream.
יהי זכרו ברוך.
Monday, October 8, 2007
Enterprise ready
Today I had to work on a not-so-new Red hat Enterprise Linux and some old version of an Oracle product. I must say how disappointed I am. The web is full of discussions and debates whether Linux is ready or not for desktop computing. After today's experience I think that all these debates are aimed at the wrong direction. Linux is ready for your desktop for couple of years now. As for the enterprise, it might be far from ready. Some issues that troubles modern system administrators and application developers:
- X stability. Enterprise releases still use X11R6 of some version. It's not nice when X goes down along with everything you had open.
- Awful user interfaces. Oracle is not the only one that lacks a decent GUI. I recently seen the latest version of Rational ClearCase for Linux. The motif interface looks like it's still 1992. Serious developers that use ClearCase demands much better interface.
- Non uniform configuration. It is used to think that all configuration is stored in the same manner under /etc and in private '.' files. Not all vendors seem to follow the convention, a thing that makes control of multiple machines, not an easy task.
- No standard package management. Some vendors supply their product in a specific package format (such as RPM). These packages are not suitable for use on different distributions, and sometimes are not usable on distributions that support the same format (eg. Mandriva and Fedora). Eventually, almost every product requires gcc/g++ to be installed, and a Makefile to be run.
- Slower adaptation of newer technologies. This is quite understandable but still annoying. Since enterprise distribution are supposed to work for a longer time without being upgraded or patched, they sometime use obsolete kernel or some other components.
- etc.
Thursday, October 4, 2007
Surprised (in a good way)
I'm in between two semesters in the university (second degree in CS), which means I have some spare time. These times shows you how much free time you had before you thought about the degree. So I try to do something useful with my time, but as stated in my previous post - I'm bored. So I started contributing to an open-source project, and upgraded my Ubuntu, and played a lot in WoW, but that's not enough. So I decided to help translating open-source project to the holy language (Hebrew, that is). My first step was to go to launchpad, and look for a project that needs translation. Then I got surprised. It seems that almost every project was already translated or being translated by someone. I didn't realize that I was going to have to dig until I find a project which both interests me, and needs translation. Finally, I found soundconverter, which I both like (and use, of course) and no one had translated it, yet. I must say that this job is not as easy as it seems, since Hebrew lacks some English technical concepts, and the application contains much more strings than I though it would.
As for another surprise. I just finished teaching my mom how to use Google and using the browsers Favorites/Bookmarks. Not an easy task, but very satisfying.
As for another surprise. I just finished teaching my mom how to use Google and using the browsers Favorites/Bookmarks. Not an easy task, but very satisfying.
Monday, October 1, 2007
Something's missing
I'm a proud Ubuntu user. I've been using Ubuntu Linux for 2 years now (since breezy). In those 2 years I managed to switch from KDE (Kubuntu) to GNOME, to try every version of every composition manager (compiz and beryl), replace at least 5 media players and 4 image viewers and much much more. I must say I am very pleased, Ubuntu is an excellent Linux distribution which changed to way I look at Linux.
But something is missing. Lately I feel I'm looking for something in my OS which I'm not sure what it is. Before installing Ubuntu, I was a proud (and a target for colleagues laughter) Slackware user. I used Slackware about 4 years, and I switched because I wanted my computer to work for me, and not the opposite. Now it struck me, and I know what's missing. I want to be in control over my system, I want to compile my applications and solve technical issues that arise when they don't compile. I want to change applications to fit my taste.
But then again, I don't want to be the slave of my computer. I want to have the flexibility when I need it, and to stay stupid the rest of the time. I want my computer to be both stable and my testing environment. I want it to be both fast but without any modifications on my behalf.
Maybe it's time for a different distro. Maybe it's time to start using Ubuntu's test releases.
Oh, one more thing. I already tried to run multiple distros using virtual machines - it's just not that.
I think I'll stick with Ubuntu at least 'till gutsy arrives, and then I'll decide.
But something is missing. Lately I feel I'm looking for something in my OS which I'm not sure what it is. Before installing Ubuntu, I was a proud (and a target for colleagues laughter) Slackware user. I used Slackware about 4 years, and I switched because I wanted my computer to work for me, and not the opposite. Now it struck me, and I know what's missing. I want to be in control over my system, I want to compile my applications and solve technical issues that arise when they don't compile. I want to change applications to fit my taste.
But then again, I don't want to be the slave of my computer. I want to have the flexibility when I need it, and to stay stupid the rest of the time. I want my computer to be both stable and my testing environment. I want it to be both fast but without any modifications on my behalf.
Maybe it's time for a different distro. Maybe it's time to start using Ubuntu's test releases.
Oh, one more thing. I already tried to run multiple distros using virtual machines - it's just not that.
I think I'll stick with Ubuntu at least 'till gutsy arrives, and then I'll decide.
Saturday, September 15, 2007
What kind of a programmer are you?
I really like watching Google's TechTalks, since they bring some brilliant lecturers, and sometimes they find fascinating topics to talk about.
Lately I've been watching the talk about Quicksilver, which is, in short, a sophisticated command line interface to many common computer tasks. I really wanted to have such interface for my own computer, but I couldn't, since I use Linux, and Quicksilver is a Mac-only product. So, after a short search, I found some alternatives, and decided to give Gnome Launch Box a try. After using it for less than an hour, I decided that this is a great piece of software, and that I should help in development. So I checked-out the source code using subversion, and started browsing it. The source is C code, which I hadn't programmed since the second year of my B.Sc, which was about 7 years ago. Even though I thought I was quite good at C, my brain wouldn't want to watch the horrible look of C and Gtk+ source code, so I decided to leave it to those who wouldn't care hacking in C.
After some reading and googling, I found a fork of Gnome Launch Box, called Gnome Do, which is actually a port of the source code to C#. Now we are talking. Finally I can start coding and contribute to the community that created such a wonderful product. But then again, reading the source files made me think that most of it is about GUI, and very little is about the "brain". I hate GUI programming. I think that's because I was never good at it. So instead of giving it a try, I left it, promising to myself that maybe sometime soon I will get back to it, overcoming my "hatred" of GUI programming, and contribute back to the product that I think that really deserves it.
What do you think? Am I weird? Is it wrong that one would prefer a specific kind of programming? Does experiencing in different types of programming makes you a better one?
Lately I've been watching the talk about Quicksilver, which is, in short, a sophisticated command line interface to many common computer tasks. I really wanted to have such interface for my own computer, but I couldn't, since I use Linux, and Quicksilver is a Mac-only product. So, after a short search, I found some alternatives, and decided to give Gnome Launch Box a try. After using it for less than an hour, I decided that this is a great piece of software, and that I should help in development. So I checked-out the source code using subversion, and started browsing it. The source is C code, which I hadn't programmed since the second year of my B.Sc, which was about 7 years ago. Even though I thought I was quite good at C, my brain wouldn't want to watch the horrible look of C and Gtk+ source code, so I decided to leave it to those who wouldn't care hacking in C.
After some reading and googling, I found a fork of Gnome Launch Box, called Gnome Do, which is actually a port of the source code to C#. Now we are talking. Finally I can start coding and contribute to the community that created such a wonderful product. But then again, reading the source files made me think that most of it is about GUI, and very little is about the "brain". I hate GUI programming. I think that's because I was never good at it. So instead of giving it a try, I left it, promising to myself that maybe sometime soon I will get back to it, overcoming my "hatred" of GUI programming, and contribute back to the product that I think that really deserves it.
What do you think? Am I weird? Is it wrong that one would prefer a specific kind of programming? Does experiencing in different types of programming makes you a better one?
Tuesday, September 4, 2007
Programming languages syntax - it's all the same
Today I had the "pleasure" to debug (actually, help debug) some 7-years-old VB code, part of an ASP website. At first I thought "the last time it touched VB was 11 years ago", but even so, I decided to give it a try. To my own surprise, I discovered I still know some of the language, and the parts I didn't know, I guessed by knowing the syntax and techniques of other (modern) programming languages.
After doing so, I was quite pleased of my "newly" acquired knowledge of VB, so I guess I might mention in a job interview that I still know a language I think I never really knew. This is only because I know other languages, and what's the difference?
After doing so, I was quite pleased of my "newly" acquired knowledge of VB, so I guess I might mention in a job interview that I still know a language I think I never really knew. This is only because I know other languages, and what's the difference?
Saturday, September 1, 2007
Hello, world!
My first blog post on the internet. Up until now, I only blogged in my corporate intra net, which meant posts were in Hebrew, and the audience was quite small.
As for the title of this post, I never really understood why is there a comma and an exclamation mark in the phrase "hello world". Anyhow, like in every programming language, the first thing written is "Hello, world!", so I decided it would be nice to label my first post accordingly.
Now I have to think about what should I write in this blog. I guess it'll be something related with
computer technologies and some real life issues. Well... time will tell.
As for the title of this post, I never really understood why is there a comma and an exclamation mark in the phrase "hello world". Anyhow, like in every programming language, the first thing written is "Hello, world!", so I decided it would be nice to label my first post accordingly.
Now I have to think about what should I write in this blog. I guess it'll be something related with
computer technologies and some real life issues. Well... time will tell.
Subscribe to:
Posts (Atom)