Microsoft Gets It All Wrong – Launching The ILDC “Friends Club” For Students

Technology June 30th, 2008

Microsoft’s new R&D Center in Israel (ILDC) is going through a lot of recruiting and PR effort. It’s latest PR stunt – The Microsoft Friends Club which is open for “all students, studying for any certified degree in computer science, software engineering, communication engineering or electrical engineering in any academic institution”.

To launch this club, Microsoft announced on a series of free rock concerts – for students studying the above mentioned fields and their friends…

Now, I’m not a PR or a recruiting expert, but it seems to me like Microsoft is shooting in the dark with this campaign:

  1. Unfocused audience - Yes, some of the attendees are going to be engineering students. I guess most won’t…. That’s hardly close to the “engineering students who are about to graduate and are looking for a job\internship” target audience. Even less if we change the definition to “geeky engineering students” who are the top talents Microsoft should really want on its side…
  2. Unclear messaging/branding – Because free rock concerts really gives the “We’re a cool software company that drives innovation. We’re the place you want to be if you want to work on leading edge technology…”. At best, it gives a statement of “We have lots of money… if we through it away like that on students just imagine what we do for our own employees”.

It’s sad that Microsoft’s ILDC chose to ignore successful events and case studies done abroad for this purpose and chose to promote itself as if it was a cellphone company…

If anyone over there at ILDC is reading this post, if you really want an effective campaign for recruiting students just learn from the two  examples below. Both target a very specific audience which is exactly the type you’d want to recruit as a company, and by sponsoring such event you’re getting the right message across: “We’re a cool company that values and sponsors new technology and innovation and the people who create it”.

1. Microsoft Imagine Cup

The Microsoft Imagine Cup is a worldwide competition for students, held by Microsoft, encouraging students to submit new and innovative projects and compete with other students locally and worldwide. As summarized in the case study:

What: The world’s premier student
technology competition, in which
teams and individuals submit their
projects online or in person for a
chance to compete at the global
finals—like the Olympics of technology—
held in a different country each
year.

Why: To inspire young people
to conceive and build innovative
technology solutions to real-world
challenges.

Who: More than 100,000 university
and high school students from 111
countries are registered for the 2007
Imagine Cup.

How: Teams and individuals can
enter nine categories that include
software design, embedded development,
Web development, short film,
photography, IT, algorithms, and a
programming battle called Project
Hoshimi.

Where: The worldwide finals of the
2007 Imagine Cup will take place in
Seoul, South Korea, in August.

More info:
http://www.imaginecup.com

ILDC can encourage such activity via its campus activities. Sponsor a local Israeli cup, and more…

2. Google Summer of Code

The Google Summer of Code is an annual program, in which Google awards stipends to hundreds of students who successfully complete a requested free software/open-source coding project during the summer.

The program invites students who meet their eligibility criteria to post applications that detail the software-coding project they wish to perform. These applications are then evaluated by the corresponding mentoring organization. Every participating organization must provide mentors for each of the project ideas received, if the organization is of the opinion that the project would benefit them. The mentors then rank the applications and submit the ranked list to Google. Google then decides how many projects each organization gets, and selects the top-n applications for that organization, where n is the number of projects assigned to them.

In the event of a single student being present in the top-n of more than one organization, Google mediates between all the involved organizations and decides who “gets” that student. The slots freed up on the other mentoring organization are passed to the next-best ranked application in that pile.

Technorati Tags: ,,

Tags: , ,

Sergey Is Leaving Google For Microsoft (Not THAT Sergey…)

Technology June 30th, 2008

Dare has written a post that claims there’s an exodus from Google to Microsoft. The post is driven by his own observations and a post entitled Back to Microsoft from Sergey Solanik detailing his departure to Microsoft.
Sergey’s post contains some very interesting observations:

So why did I leave?

There are many things about Google that are not great, and merit improvement. There are plenty of silly politics, underperformance, inefficiencies and ineffectiveness, and things that are plain stupid. I will not write about these things here because they are immaterial. I did not leave because of them. No company has achieved the status of the perfect workplace, and no one ever will.

I left because Microsoft turned out to be the right place for me.

First, I love multiple aspects of the software development process. I like engineering, but I love the business aspects no less. I can’t write code for the sake of the technology alone – I need to know that the code is useful for others, and the only way to measure the usefulness is by the amount of money that the people are willing to part with to have access to my work.

Sorry open source fanatics, your world is not for me!

Google software business is divided between producing the “eye candy” – web properties that are designed to amuse and attract people – and the infrastructure required to support them.

And some observations of Google’s culture (bolding was done by me):

On the other hand, I was using Google software – a lot of it – in the last year, and slick as it is, there’s just too much of it that is regularly broken. It seems like every week 10% of all the features are broken in one or the other browser. And it’s a different 10% every week – the old bugs are getting fixed, the new ones introduced. This across Blogger, Gmail, Google Docs, Maps, and more.

This is probably fine for free software, but I always laugh when people tell me that Google Docs is viable competition to Microsoft Office. If it is, that is only true for the occasional users who would not buy Office anyway. Google as an organization is not geared – culturally – to delivering enterprise class reliability to its user applications.

The culture part is very important here – you can spend more time fixing bugs, you can introduce processes to improve things, but it is very, very hard to change the culture. And the culture at Google values “coolness” tremendously, and the quality of service not as much. At least in the places where I worked.

Since I’ve been an infrastructure person for most of my life, I value reliability far, far more than “coolness”, so I could never really learn to love the technical work I was doing at Google.

Dare also quotes Svetlin Nakov that also have some interesting things to say about the Google culture:

Google interview were not professional. It was like Olympiad in Informatics. Google asked me only about algorithms and data structures, nothing about software technologies and software engineering. It was obvious that they do not care that I had 12 years software engineering experience. They just ignored this. The only think Google wants to know about their candidates are their algorithms and analytical thinking skills. Nothing about technology, nothing about engineering.

Google employ everybody as junior developer, ignoring the existing experience. It is nice to work in Google if it is your first job, really nice, but if you have 12 years of experience with lots of languages, technologies and platforms, at lots of senior positions, you should expect higher position in Google, right?

This just demonstrates another cultural problem – Google doesn’t hire the right people for the job.
Granted, young, enthusiastic developers, with string academic background (and probably several degrees) can do some cool innovative stuff. These are exactly the type of guys you would want in your R&D department.
But it also the type that tends to loose interest when the research phase ends and the projects has goes to scaling and maintenance phases where you have to deal with stuff like support, maintenance (Google doesn’t even provide a roadmap for its products), localization, scalability, …

The bottom line is, as Dare concluded, is that Google isn’t a small startup anymore but it still thinks and acts like it is – in its hiring policies, internal processes and culture.
When measuring it up against other software giants it simply seems to lack…

As Fortune sums it up:

Think about that. Google recently made headlines by bidding almost $5 billion in a government auction of wireless spectrum, even though the company had no plan for using it. Some of its more peculiar products include Google Sky, Google Mars, and Google Ride Finder. It has become a significant investor in alternative-energy projects. Yes, alternative energy. And its founders fret that its risk-taking days are over? Then again, Google’s biggest risk may be recreating the magic it enjoyed as a startup- that intangible quality that makes Silicon Valley tick. Paul Buchheit, the former Google engineer who is on to his second startup now, recalls what he loved about Google’s early days. “I was always so excited at Google, because I didn’t know what would happen next,” he says. “Then I knew what would happen next.” Predictability is a virtue in the world of big business. It’s just not particularly Googley.

Maybe some of us in the industry were writing off Microsoft and crowning Google a little bit too soon…

Technorati Tags: ,,,

Tags: , , ,

How Do You Define “Good Code”?

Programming June 26th, 2008

I was on a phone interview the other day where I was asked for my definition of “Good Code”.

The first thought that came to mind was maintainability – if it can’t be understood, maintained and extended by other developers than its definitely not good.
Then, other things came to mind: efficiency, elegance (simple, proper use of language constructs and environment capabilities), modularity, proper object-oriented design, …
Of course, and we tend to take that for granted, it also has to work… without errors, security holes, etc.

In his book, Code Complete, Steve McConnel supports my definition of good code as maintainable code:

Another theme that runs throughout this book is an emphasis on code readability. Communication with other people is the motivation behind the quest for the Holy Grail of self-documenting code.

The computer doesn’t care whether your code is readable. It’s better at reading binary machine instructions than it is at reading high-level-language statements. You write readable code because it helps other people to read your code. Readability has a positive effect on all these aspects of a program:

  • Comprehensibility
  • Reviewability
  • Error rate
  • Debugging
  • Modifiability
  • Development time—a consequence of all of the above
  • External quality—a consequence of all of the above

Readable code doesn’t take any longer to write than confusing code does, at least not in the long run. It’s easier to be sure your code works if you can easily read what you wrote. That should be a sufficient reason to write readable code. But code is also read during reviews. It’s read when you or someone else fixes an error. It’s read when the code is modified. It’s read when someone tries to use part of your code in a similar program.

Making code readable is not an optional part of the development process, and favoring write-time convenience over read-time convenience is a false economy. You should go to the effort of writing good code, which you can do once, rather than the effort of reading bad code, which you’d have to do again and again.

On the other hand, Paul DiLascia, from MSDN’s {END BRACKET} column, provides a list of traits that good code should have:

Whether you code in C/C++, C#, Java, Basic, Perl, COBOL, or ASM, all good programming exhibits the same time-honored qualities: simplicity, readability, modularity, layering, design, efficiency, elegance, and clarity.

Simplicity means you don’t do in ten lines what you can do in five. It means you make extra effort to be concise, but not to the point of obfuscation. It means you abhor open coding and functions that span pages. Simplicity—of organization, implementation, design—makes your code more reliable and bug free. There’s less to go wrong.

Readability means what it says: that others can read your code. Readability means you bother to write comments, to follow conventions, and pause to name your variables wisely. Like choosing “taxrate” instead of “tr”.

Modularity means your program is built like the universe. The world is made of molecules, which are made of atoms, electrons, nucleons, quarks, and (if you believe in them) strings. Likewise, good programs erect large systems from smaller ones, which are built from even smaller building blocks. You can write a text editor with three primitives: move, insert, and delete. And just as atoms combine in novel ways, software components should be reusable.

Layering means that internally, your program resembles a layer cake. The app sits on the framework sits on the OS sits on the hardware. Even within your app, you need layers, like file-document-view-frame. Higher layers call ones below, which raise events back up. (Calls go down; events go up.) Lower layers should never know what higher ones are up to. The essence of an event/callback is to provide blind upward notification. If your doc calls the frame directly, something stinks. Modules and layers are defined by APIs, which delineate their boundaries. Thus, design is critical.

Design means you take time to plan your program before you build it. Thoughts are cheaper than debugging. A good rule of thumb is to spend half your time on design. You need a functional spec (what the programs does) and an internal blueprint. APIs should be codified in writing.

Efficiency means your program is fast and economical. It doesn’t hog files, data connections, or anything else. It does what it should, but no more. It loads and departs without fuss. At the function level, you can always optimize later, during testing. But at high levels, you must plan for performance. If the design requires a million trips to the server, expect a dog.

Elegance is like beauty: hard to describe but easy to recognize. Elegance combines simplicity, efficiency, and brilliance, and produces a feeling of pride. Elegance is when you replace a procedure with a table, or realize that you can use recursion—which is almost always elegant:

int factorial(int n) {   return n==0 ? 1 : n * factorial(n-1); }

Clarity is the granddaddy of good programming, the platinum quality all the others serve. Computers make it possible to create systems that are vastly more complex than physical machines.
The fundamental challenge of programming is managing complexity. Simplicity, readability, modularity, layering, design, efficiency, and elegance are all time-honored ways to achieve clarity, which is the antidote to complexity.

Clarity of code. Clarity of design. Clarity of purpose. You must understand—really understand—what you’re doing at every level. Otherwise you’re lost. Bad programs are less often a failure of coding skill than of having a clear goal. That’s why design is key. It keeps you honest. If you can’t write it down, if you can’t explain it to others, you don’t really know what you’re doing.

So what are the most important trait for “Good Code” ?
Later on, it struck me – like anything when it comes to engineering, its about balance.
When we write code we strive to find balance between complexity and simplicity by constantly evaluating the different tradeoffs we have to choose in order to get there.
Therefore, good code is code that strikes the right balance balance between all of the qualities mentioned above.

Think about it the next time you’re writing or reading someone else’s code…

Technorati Tags: ,,

Comments (2) imported from www.ekampf.com/blog/:

Tuesday, July 01, 2008 1:01:39 PM (GMT Daylight Time, UTC+01:00)

“On the other hand, I was using Google software – a lot of it – in the last year, and slick as it is, there’s just too much of it that is regularly broken. It seems like every week 10% of all the features are broken in one or the other browser. And it’s a different 10% every week – the old bugs are getting fixed, the new ones introduced. This across Blogger, Gmail, Google Docs, Maps, and more. “

As much I really like the simple but powerful UI of services like Gmail etc: Sometimes its really annoying to see bugs coming and going! The software seems never to get stable. And Google seems to be aware of this, at least they mark nearly all their apps with a BETA-tag :-)
It would be interesting to hear something about the software development process. Do they practice things like unit-tests, continuous integration, code reviews, etc.?

Florian Potschka

Tuesday, July 01, 2008 1:25:41 PM (GMT Daylight Time, UTC+01:00)

Hey Florian,
According to this and this its seems like a one big community where each project is managed like an open-source project.
From experience, having developers dividing their time between several projects (that can be unrelated as the post says) doesn’t work well…
Not much public information on their internal practices though… not sure if its a good sign :S

Regards,
Eran

Eran Kampf

Tags: , , ,

The Complete Checklist for Cleaning Up Your Machine

Uncategorized June 22nd, 2008

Control Panel On my last day at SAP, two days ago, I had to return to IT the desktop machine I’ve been using for the past 3 years. As I’ve been borrowing and returning laptops quite a lot so far (I didn’t have my own SAP laptop so I had to borrow one for temporary use every now and then) I became accustomed with the process of returning computer hardware to IT.

All these these different computers tend to contain personal information and, especially when it comes to laptops, tend to get reused in the company…

Now of course the due process of IT is to re-image these computers before handing them over to the next guy but do I really want to trust IT?
They might not re-image it immediately, stick it on a shelf and get to it later, or maybe never…

Maybe I’m paranoid but I like removing everything from my machine before turning it over.
The following is a checklist I use for cleaning up before returning any computer:

  • For Developers: make sure all your code is safe!
    • Make sure you’re not leaving anything checked out.
    • Backup any code snippets, POCs, etc. you have on your machine…
  • Clean up browsers data
    • Clean up FireFox data – Use the Tools|Clear Private Data menu option
      image
    • Clean up IE data – Tools|Internet Options|General|Delete…|Delete All…
      image
  • Run Crap Cleaner with all options checked (including the ones in the Application tab)
    image
  • Run the Windows Disk Cleanup utility from Start Menu|Accessories|System Tools|Disk Cleanup (or cleanmgr in the Start|run dialog)
    • Be sure to remove the Compress Old Files as its slow and not useful.
  • For Laptops:
    • Remove passwords for wireless networks. Open up Windows Wireless Network Connection Settings and remove all the wireless networks
      image
    • Remove application passwords. If you have applications like Live Messenger, Skype, etc. that are marked to remember your login information  you have to clean that up. Live Messenger, for example, has a forget me button on the login screen for this purpose:
      image
    • Remove personal files and programs
      • Uninstall FolderShare. FolderShare automatically logs in and it also synchronizes deletes. If you delete anything (or worse, IT deletes it) that delete operation is synchronized via FolderShare so it will get deleted on all your machines.
        • Once uninstalled, you can delete all the folders that were synchronized by FolderShare.
      • Go over the My Documents folder and make sure there’s nothing there.
      • Uninstall all chat programs: Live Messenger, Yahoo, GTalk, etc.
      • Uninstall your password management application.
      • Other programs that may contain login information or other important information:
        • Twitter clients (Twihrl, Twiteroo etc.)
        • Plaxo Pulse Notifier
        • WebDrive
      • Empty the Recycle Bin
      • If you’re paranoid or got something to hide you can delete files using QuickWiper which makes sure stuff you delete cannot be undeleted.
        If you’re extremely paranoid wipe the free space once you’re done to make sure nothing is recoverable.

That’s it! Your computer should now be completely clean and safe to be handed over to anyone.

(Originally inspired by Scott’s post)

Technorati Tags: ,,,

Tags: , , ,

Apology to My Readers (Buggy dasBlog Contact Form)

Blogging June 10th, 2008

There’s nothing that pleases me (and I guess, any blog owner) more than getting feedback on my blog.
While I do my best to respond to comments as soon as possible some of you who contacted me through dasBlog’s contact form are probably wondering why I’m ignoring you. Well, I’m not!

It seems like there’s a bug in dasBlog’s form – although the form specifically asks for your E-mail address it does not use that information for anything.
So when I get the email notification I only get the comment text without the E-mail to respond to (unless your signature includes it).

I will replace this form with a better alternative as soon as I get home.
If you’ve been waiting for my response please accept my sincere apologies and feel free to write again (and include your email in the comment text).

Technorati Tags:

Tags:

Thoughts About Apple’s WWDC ’08 Announcements and the iPhone 3G?

Technology June 10th, 2008

wwdc08_060 Here are my notes from the Apple’s Worldwide Developers Conference:

  • Apple is cutting the price of the iPhone to $199 for the 8GB version and $299 for the 16GB version.
    This price tags now puts the iPhone in direct competition with Nokia on the consumers market and with Blackberry on the enterprise market.
    The iPhone is now targeting mainstream consumers and not only the high-end market…
  • 35% of Fortune 500 companies participated in  Apple’s enterprise iPhone experiment – including the US Army, Disney, etc. That’s quite an impressive market engagement.
    The new iPhone enterprise features, coupled with the new competitive price tag can make Apple a significant player in the enterprise market. Look out RIM…
  • Seems like $9.99 is going to be the pricing standard for iPhone apps. Cheap…
  • MobileMe was dubbed “Exchange for the rest of us” – a new service from Apple to synchronize personal data across devices and platforms.
    Basically it does what Plaxo does but its not free :S

    • Microsoft’s Live MeshSkyDriveFoldershare services now have a new serious competition…
    • In “Don’t Let Architecture Astronauts Scare YouJoel Spolsky claims that data portability is just a theoretical problem invented by architecture astronauts (Ray Ozzie in this case).
      Joel picked a bad example to prove his point as I guess having all the major players trying to data portability is a sign that its a real need.
      Personally, I don’t know what I would have done without Plaxo and Foldershare but that’s a topic for another post I guess…
  • The seventh release of the iPhone SDK is out.
  • The next version of Max OS X is called Snow Leopard and is set to be released within a year.
    • Apple plans to support new hardware architectures (like multiple CPUs) and fix Leopard issues as well as add native support for Microsoft Exchange.
    • Sounds more like a Leopard Service Pack than a new major version…
  • The “Apple Push Notification Service” – finally a decent solution for notifications for background applications on a mobile platform.
    Instead of draining battery life and degrading performance by running a background process, applications can use the service to update remotely.
    Here’s how Dan Moran from MacWorld describes it:

    as you run an app like an IM client, it’s connected to the server. When the user quits the app, the iPhone will maintain a connection to the server, which will let them push notifications. It can push three types of notification: badges, custom alert sounds, and you can push custom textual alerts, appearing kind of like SMS messages and you can provide buttons that will automatically launch application. Great thing about this design: it scales, but only requires one persistent connection. This is sweet, sweet news for all developers and those who wants to use IM clients especially.

Any other thoughts regarding Apple’s announcements and plans?

Tags: , , ,

Of Course It’s Down!

Technology June 2nd, 2008

Twitter is down again. Just ask http://www.istwitterdown.com/

image

It’s funny that we’re starting to take this for granted…

Tags: