XImplosionX

    Step into my mind.

    Browsing Posts in Technology

    During the first day of the US Imagine Cup Finals, I had the pleasure to speak with Anthony Salcito, Microsoft’s Vice President of Worldwide Education. We talked about the need for new approaches to technology in education, and then spoke for a while about what the Imagine Cup means for Microsoft and for the community. I filmed our conversation about the Imagine Cup, which you can watch below. A very special thanks to Austin Stewart, from Microsoft’s PR team, who helped get me this great opportunity to meet Mr. Salcito.

    More tomorrow morning.

    During my time at the Redmond campus, I was fortunate enough to meet with Scott Hanselman, Principal Program Manger Lead for Microsoft’s Developer Division. He also runs a very successful blog and podcast. Mr. Hanselman’s position at Microsoft requires him to travel a lot. This, combined with his living in Oregon, makes it difficult to snag a meeting with him. But we were lucky enough to meet with Mr. Hanselman for an hour in Building 5.

    We started off our time with Mr. Hanselman by introducing ourselves. He then lectured us on the history of Bulletin Board Systems, relating it to a recent interview he had done on his podcasts. He then talked about his blog, and how useful social media is.

    And then we got to the new technology. Mr. Hanselman first showed us Boot to VHD, a new feature in WIndows 7 that allows us to take the VHDs created in Virtual PC 2007, Hyper-V, and other parts of the virtualization platform, and boot our machine to this virtual OS. This allows the virtual hard disk to use hardware rather than the emulated environment when running. This follows the idea of “less virtual, more machine”.

    The next demos Mr. Hanselman showed us struck me as very cool. He decided to demonstrate two new features of .Net 4.0: PLINQ and MEF. Now when I heard him say PLINQ, I had to do a double take. My understanding was PLINQ had been around for at least a year. But I was happily surprised to find that PLINQ (Parallel Language Integrated Query) was finally shipping as a part of the .Net Framework. This made me happy. Finally I could add support for multi-core processors with very little hassle. Simply invoke a query with the .AsParrallel() extension method, and you’ve got yourself a query working across multiple cores. There are other features in PLINQ, and I urge you to check out the Parallel Programming With .Net blog for more info.

    The final demo Mr. Hanselman showed us was MEF. MEF stands for the Managed Extensibility Framework. Imagine the following situation: You are an enterprise developer working for a company that keeps inventory of different kinds of cars. Each car has similar qualities, defined in an interface, while being unique in itself. Your boss approaches you, requiring a new brand be added to the application used for keeping inventory. Due to the lack of a quality plugin system, this task would be very tedious and an all around pain in the neck. What MEF allows you to do, is simply create your new class, implementing this interface, export it through a new DLL, and the inventory application will do a “composition”, loading any and all classes that use the interface declared in the core of the API. I was extremely excited when Mr. Hanselman showed us this new feature. I’ve always loved the idea of extensibility, but hated using slow Reflection based techniques for dynamically loading classes. I highly recommend you take a look at MEF over on CodePlex. It’s a very cool framework and could make great leaps in improving application development productivity.

    After that demo, we had to go our separate ways again. Like I said, Mr. Hanselman is a very busy man, and I was very grateful to have met with him. I highly suggest your follow him on Twitter or read his blog, as he frequently provides interesting links related to social media and new technology.

    Hey, turns out I have a blog. Who’d have thought.

    I really must apologize for my not updating. I’m sure i could come up with plenty of excuses, but where would that get us? So instead, I’m going to give a brief update as to what is going on.

    First and foremost: Happy New Year! 2009 was an interesting and hectic year. We saw history made when Barrack Obama was inaugurated as the first African American president. We had quite a few notable celebrities pass away this year, which got more news time then most issues.
    It was also a very good year for social media. Since I joined Twitter, I saw many of my friends from school joining. I’ve also seen many people joining, Facebook. What this has taught me: Social Networking is here to stay.
    It was also an exciting year for technology. This year we saw Microsoft announce Project Natal, release Windows 7, Windows Server 2008 R2, Visual Studio 2010 Beta 1 and 2, and the Zune HD. I was very excited to see these technologies released, and I can safely say I’ve gotten to play with all except Project Natal.
    But 2009 had it’s low points. Most notable: the economy. It’s been a hard couple of years, and there is more to come. But we will get through it.
    Now, seeing as it is 2010, I should make a New Years resolution, no? Well, I think I can make two very simple resolutions: Blog more, and write more code. Like I said, I could create multiple excuses as to why I have not done either of these lately, but where would that get me? So instead, I’m just going to work harder at it.

    In closing, I’d like to give shout-outs to people online.

    • LittleKuriboh: You are awesome. You created a YouTube sensation, and have always brought a smile to my face. I wish you the best in the new year, and once again congratulate you on your Open Web Award.
    • Kelson Thomas: You always spark interesting conversation, be it on Twitter, in class, or over IM. You’ve made 2009 a hoot and a half.
    • Eric Hawtin: You’ve been just as entertaining as Kelson. You always keep Twitter alive and provide good (well not always) input to our conversations, and I thank you for that.
    • Microsoft: We saw this coming. They had a great year in releases, and I look forward to seeing what they will do in 2010.
    • Alfred Thompson: You always have interesting resources for students, and you always write interesting blog posts. You’ve had me scratching my chin more then once. I thank you, and wish you the best in 2010

    I could go on for hours, listing the people who made 2009 a good year, but I won’t, as that would take up a few pages.

    In closing, I’d like to thank everyone for an awesome year, and I am excited to work with you all in 2010. You’ve all been great, and I am keeping my head high for the next 365 days.

    Thanks for reading,
    Patrick Godwin

    With the popularity of managed languages in recent years, we have no doubt seen changes in the way we program. In recent years, we’ve seen many additions to the .Net family of managed languages, such as WPF, LINQ, WCF, and XNA, to name a few. But have we given up our good programming practices for the convenience of managed languages?

    I don’t know about the majority of programmers out there, but I find myself writing sloppy code while working in a managed language. I’m not saying that I break all rules of style or flow, but I’m not as careful as I usually am. Let’s say we’re writing a function in C++ that calls a simple integer type function. The rule of thumb would be to check what it returns, and based on predetermined conditions, handle any errors that may arise. A pattern I’ve noticed, mainly with C# programming, is a total disregard for exception handling. And even if the exception is handled, it isn’t handled well. Last time I checked, “Throw Exceptio” was not a smart way to handle errors.

    I’m sure there are many other examples of Managed Programming leading to lazy programming. This is only the most obvious one I’ve delt wtih. What issues have you had with managed languages? Please write about them in the comments, get the conversation going.
    Thanks for reading,
    Patrick Godwin

    Note: I’m very sorry for the short length of this post. The quality of this post is also extremely bad, and does a poor job of articulating my thoughts on the subject. Mea culpa.

    I get asked this question at least once a month. Someone I know will come up and ask me this question. I can never answer this in a clear, concise way. So I’ve decided to write a blog post on all the Pros and Cons of the languages I know, and refer my friends to this post.

    VB.NET: I love this language and I would recommend it to anyone starting programming. I learned how to program in Visual Basic 2005 and I can safely say it is one of the easiest languages I have ever used. The syntax reads in an easy, clear way. You don’t have to worry about silly semi-colons or curly braces. Building a User Interface is simple with the Visual Studio WinForm designer. The inclusion of the .NET Framework in Visual Basic has given some great resources to this already great language. The only downside to VB.NET is the dependence on the .Net Framework/Mono Runtime. While this is possibly one of the greatest features in the language, it takes away a lot of the power you see in an unmanaged language. Not to much of an issue, but still a con.

    C#: C# is another great language that I would recommend C# to someone who has some prior experience. While the syntax and program design can be annoying at times, it is a very powerful language. While sharing the same advantages as VB.NET, it also has integration with the XNA Framework. This is by far the best managed Graphics API available. With it’s support for Windows, XBox 360, and the Zune it destroys every feature available in Managed DirectX. The biggest issue with C# is, again, it’s dependence on the .Net Framework/Mono Runtime and it’s slightly annoying program design.

    C++/C: This is the language I always suggest when I am asked that question. While it is one of the hardest languages to learn, it is the best. I feel that learning a good, unmanaged language gives you a proper idea of independent programming. You aren’t relient on a managed environment, like in the .Net and Java languages, which means you have to manage your own memory. This teaches developers safe coding practices and helps them develop clean code. Once you have a good hold on the language, the object oriented concepts should be studied. This is when C++ becomes a true powerhouse. This allows you to develop complex applications or even great game engines. Once you have C++ under your belt, most other languages should come quite easily.

    Python: A very powerful scripting language. You can accomplish many tasks in Python with relative ease, given it’s large, supportive user base. The only issue with Python is it’s annoying syntax. I swear I have so much trouble reading Python code for education. In a language like Python it can be hard to enforce good style, which is a big minus for the language.

    Java: What can I say about Java? It has to be one of the worst languages I have ever TRIED to learn. I want to know who the genius was that, while writing the AP Computer Science Curriculum, thought “Well, we assume that these students have very little, if any, prior programming experience. What language should we choose? I know! Java!”. Whoever this man, or group of men, was, he screwed up big time. Why choose a language that has an annoying syntax and no advantages over the .Net Framework and force students to learn it for what should already be a tough class. While it is managed like the .Net languages, the Java Runtime Environment is receiving updates ALL the time. What are they constantly changing? Honestly, if you program in Java you have the patience of a saint. It takes real skill to tame this monstrosity of a language.

    Now there are many more languages thant those I have covered here. MANY more. But these are the languages that have seen the most attention in recent years, and these are the languages I have used. I’ll always suggest C++ and then VB.NET for a beginner, but you should take everyone’s suggestion as just that, a suggestion. Read some tutorials, try each language, form your own opinions. Whatever you find the easiest and cleanest should be the language you chose.

    Thanks for reading,
    Patrick Godwin

    Edit: Forgot to mention Mono when talking about the .Net Languages. Edited for clarity.