free geoip Jayson's Blog - jaysonKnight.com
jaysonKnight.com
Welcome to my corner of the internet

Jayson's Blog

  • C/C++ Is Dead: Long Live C/C++!

    url

    Bjarne Stroustrup changed the programming world forever when he “invented” C++ (at the time, called C with classes). He did it purely to solve his problems with C, which were at the time was that C was a purely procedural language leading to spaghetti code that was very hard to maintain, difficult to extend, and only leant itself to systems programming. Little did he know that C++ would have a profound effect on the realm of computer science, and would eventually be the foundation of modern day IT as we know it, as well as being the foundation for the big two modern day programming languages: Java and C#. Not to mention the fact that C++ runs the code behind most of the world’s largest infrastructure: The phone system, the power grid, etc.

    I learned the basics of C/C++ during my first round of computer science classes in the late 90’s (I’m showing my age by even admitting that) and thought to myself “there is nothing that C/C++ can’t accomplish when it comes to programming” which in most cases is correct. All modern day operating systems are programmed in C, and Windows is no exception. The entire underlying API’s are exposed via C function calls, with various C++ wrapper frameworks available (MFC, ATL, WTL, C++/CLI) available to simplify programming the underlying Win32 API, which is huge, enormously complicated, and arcane. The Win32 API has been around for almost 30 years and is very much showing its age, but Microsoft’s commitment (for the most part) to backwards compatibility has caused the Win32 API to become very bloated, hence the need for wrapper frameworks to simplify programming against the Windows platform.

    When I learned C/C++, we were programming against SPARC mainframes, and UNIX systems. Stroustrup claims that C++ is portable, but the issue is that vendors can add their own extensions (such as Microsoft’s CLI extensions, which in my opinion cripple C++ on Windows to the point of almost being useless outside of the using the standard ANSI implementation frameworks), and that defeats the entire portability concept. Stroustrup has been very outspoken about vendors adding their own extensions, but I digress. My problem with C++ is that (by computing standards) it’s a dinosaur. The STL is a huge pain in the ass, and isn’t implemented correctly across platforms (again Microsoft, I’m looking squarely at you).

    For a couple of months last year, I dove into C++/CLI hoping it would make me appreciate Microsoft’s implementation (I know the ANSI standard, but I program Windows for a living, so why not learn the MS “version”), and was horrified at what I found. Handles, references, de-references, pointers, everything is heap based (Java anyone?) for the most part, you can create both value based and ref based structs (defeats the purpose IMO, just make everything a class)…and what horrified me the most was Visual Studio 2010 does NOT support intellisense for C++/CLI projects! That all being said, Microsoft’s ANSI implementation of C++ is fairly spot on, aside from a few nitpicks.

    I know there are C/C++ purists out there, and in the end most languages get compiled down to C/C++ before executing as byte code since the built in compilers for most OS’s can readily read in C/C++ and transform it into native code. And I guess that’s the point of this post, it’s this developer’s opinion that C/C++ has largely become an intermediary language. Computers are fast enough and have enough resources that we can use much higher level languages , and have faith in our compilers that they will emit the most effective and optimized “intermediate” language. As a systems programming language, C/C++ will never disappear, at least not for a while, but as a GPPL, at least within IT, it’s largely deprecated. OS vendors, and the big 4 software vendors (Microsoft, Adobe, Oracle, Apple) will always need talented C/C++ developers, but in the IT space, C++ needs a fork stuck in her.

    I was very disappointed in my C++/CLI endeavors because in the end, I was out to make myself a better developer. All that endeavor did is make me appreciate modern day programming frameworks even more, in my case, .Net/C#. Could I write programs that perform better in C++? Sure, but is it worth the extra effort? Nope. Not at all. Modern day frameworks like JRE and .Net have their drawbacks, and can be resource heavy at times, but in the end we need to produce code that runs, and works. Hardware resources are cheap enough that it outweighs the extra man-hours it takes to write better performing code. That’s not to say we shouldn’t follow correct coding paradigms, but in the end, time is money. Do you want to pay a developer an extra month’s salary to save half a gig of memory in their application, or shell out the couple hundred bucks for a DIMM of RAM?

    My final point is that many consider C++ to be an object-oriented language. It’s this developer’s opinion that it is not. Understanding inheritance chains in C++ is a monumental task, and isn’t as fine grained as it is in more modern languages. Multiple inheritance leads to HUGE maintainability problems in C++ projects. Keeping up with source and header files is a nightmare, and the rules around copy constructors are maddening. And of course the blaringly obvious, keeping up with pointers and references. I know there are C++ frameworks to help alleviate manual memory management (smart pointers), but modern day frameworks do a much better job, at less cost in terms of man-hours tracking down memory leaks.

    Java and C#/.Net are not the end all be all. There are times when a component needs to be written in C++ for the utmost performance, but as the years click by I see less and less of a need for these. All professional developers should understand C/C++ conceptually, since in most cases the underlying API is written in one of those languages, and I will say that honing my C++ skills for the Win32 API has made me a more thoughtful programmer. But in the end, C/C++ is dead outside of systems programming. I’m sure Stroustrup would disagree, but we’re not all as brilliant as he is.

  • New Year, New Chapter: Bring it On

    Another year has passed, and I can safely say that 2011 ended up being one of the best, and the worst years on record. It ended with a good bang for sure, and the last week of December was amazing. I always start to wonder about resolutions though, and why people pick the end of the year to actually make them. I tend to make resolutions on a rolling basis, not stack them all up together to attempt in one fell swoop. Tackling a fistful of resolutions at once is a recipe for disaster in my opinion. I have professional resolutions that I intend to conquer, but really I just want 2012 to be a continuation of the last few months of 2011. I’m going to cycle more, going to play more tennis, learn a few new programming languages…all in all, no big changes. If it ain’t broke, don’t fix it is my mantra.

    I wish all of you the best in 2012. Life is a blessing, and if you don’t succeed in your resolutions, at least you have warm air in your lungs and blood flowing through your veins. My biggest “resolution” is just to not take life too seriously. It’s way too short to do so.

  • Will Email Ever Become Obsolete?

    E-mail

    This post is, for the most part, purely hypothetical but in my opinion poses a very real question: Will email ever become obsolete? One of the most time consuming parts of my life as an independent IT consultant trying to drum up client leads and staying in touch with current contacts is the sheer amount of information I have to to aggregate from disparate sources, keep up with various social networks, develop my own brand, and share my own information. Something I’ve noticed is that I use email less and less these days; virtually all of my communication is done via social networking sites (Facebook, LinkedIn, Twitter, and Google+), and most of the information I receive is via RSS feeds that I subscribe to, e.g. blogs, job search feeds, newsletter updates. Can email ever be replaced by all of the above? Perhaps not, but in my own life, email has become a 2nd rate citizen. And it’s already an antiquated communication medium because it’s one to one in nature, and does not spur conversations, at least not in a collaborative “real time” way.

    Social networking is taking over the communication space. Almost all of my (non-telephone based) personal communication with family and close friends is done via instant messaging, text messaging, or video chat. No email required. These mediums are much more personal in nature, more interactive, and now that smartphones are ubiquitous, more accessible. Why email someone when you can send a short text, or just message them with one of the dozens of IM clients? Or (in the case of the iPhone) make a quick facetime call, or with Blackberries send a quick voice memo to someone? If I had to make a prediction, I’d say that POP3/IMAP/SMTP will be the next NNTP within 10 years: Still necessary, but undesirable as a means of communication.

    That being said, I don’t ever see corporate email taking that much of a backseat, though internal social networking in large companies is growing very popular, what with Sharepoint infrastructures existing in virtually all organizations, which I embrace wholly (one of my main focuses as of late are large scale Sharepoint implementations) since this leads to a much more personalized communication experience. Corporations are more geographically dispersed than ever, and many knowledge workers are remotely based. Let’s face it, people like personalized communication: It’s why we post pictures to social networking sites, or why we start our own blogs, and just plain prefer personalized communication mediums. Email is so…well, blah and boring. And not personable at all.

    And then there are the logistical and technical reasons why email should just go away, or something else should come along to replace it. The protocols (POP3/IMAP/SMTP) are ancient by internet standards…relics of the past that exist now only because they have to. At the very least, POP3 needs to just go away as it creates more problems then it actually solves. Try explaining to everyday internet users why POP3 is broken, e.g. why if you set up POP3 accounts on multiple computers or devices the end user will have missing messages on each device…anyone familiar with the POP3 protocol will know the answer immediately, and if you aren’t familiar with why this is, I will defer that conversation to the comments section should it need to be explained in more detail.

    But I digress. Microsoft Outlook (and the various social connectors branded under Bing that integrate with Outlook) have done a decent job in making email more of a “discussion” based medium rather than a “fire and forget” medium; you can group email threads in conversation view and it’s more like a forum, and the social connectors make it a bit more personable, but it’s still a far cry from the conversation based medium that actual forums, or social networking websites provide. In this day and age of people owning more than one email capable device, email is broken and not optimal anymore. IMAP alleviates some of this, but it still requires some sort of technical knowledge on the end user’s part

    Email spam. The scourge of the internet. According to the wiki on spam roughly 90% of all email sent on the internet is spam. This burdens the ISP’s most of all (or corporate email servers) and is the equivalent of an internet based DoS (denial of service) attack as the influx of spam to email servers is a HUGE burden…those processing cycles could better be spent elsewhere. When it comes to other communication mediums, spam is rare, and so long as you keep your social networks in check, non-existent. The only non-email based spam I receive are the occasional IM-bot, but those are few and far between.

    I’ll end the post with RSS, or better yet, what RSS should have been. It’s a bit of a digression, but where RSS fits in my internet life is:

    • Almost all of my (used to be) email based newsletters, I get via RSS feeds.
    • I have virtually no bookmarks for active content (vs. static content), subscribed to updates via RSS. This includes forum posts, blog discussion, Facebook updates, etc. In the past, I’d get an email notification if something was updated/commented on/etc., now I just get updated RSS notifications. And…
    • Some sites support CommentRSS (including mine) which means you can reply to an RSS notification without having to visit the actual site.

    Where RSS fails is that it’s not secure, can’t (realistically) be used for sites that require you to log in, and it’s still very much “email-like” in that it’s a push based mechanism of communication and is not interactive, e.g. multiple users contributing, and that information being aggregated in a place other than the actual site.

    What the alternative to email is, I have no idea. I have to keep up with Twitter, Facebook, LinkedIn, Google+, Windows Live Messenger, and Skype…all disparate technologies and communication mediums. Aggregating and keeping track of the sheer amount of information is tough, but the interactiveness and personable side makes it worth it. Several companies have attempted to unify these (Trillian, Omea Reader (defunct, though at the time it did a great job of aggregating email, RSS feeds, and NNTP in a searchable format…they were definitely on to something), Microsoft (with their social connectors), TweetDeck, HootSuite (my preferred way of reading content from my favorite social networking sites), various newsreaders, and various RSS readers) but in the end, I’ve realized that finding what’s important to me and cataloging it into OneNote works just fine. More work on my end, but worth the extra effort. That being said, I am sure a better solution exists, something we can’t even picture right now…similar to how the internet changed our lives without even realizing how it could. I look forward to the next decade of internet innovation, and more specifically, how we communicate with one another.

  • Information Overload: The Amount of Disparate Technologies

    I’ve been thinking quite a bit lately about the state of the current software development world compared to how it was when I first turned professional over 10 years ago, and it’s a staggering difference to say the least. I cut my programming teeth on VB6, VC++, and classic ASP. CSS and HTML were still in their infancy (blink tag anyone?), and almost all corporate software was done using a 2 tier model, or thin client wrappers around legacy mainframe apps (COBOL/AS400 anyone?). I was lucky in some regards in that .Net came out during the first year of my professional career, so that I could learn it from the ground up. We’re on version 4.0 now, and the amount of class libraries that ship in the System.* and Microsoft.* namespaces has more than doubled since the early betas. Learning the entire 4.0 BCL from scratch would be daunting to say the least. During the early betas of .Net, there were plenty of times where I wondered what the hell I had gotten myself into.

    Now enter the big bad web, which unless you swear up and down by C++/STL/ATL/COM (code dinosaur in other words) you absolutely must write applications for. A cursory list of the technologies we as web developers have to know intrinsically:

    1. HTML (duh, and now with HTML5, the game has really changed)
    2. CSS (CSS3 is also a game changer)
    3. JavaScript
    4. The DOM
    5. jQuery
    6. AJAX
    7. JSON
    8. REST/SOAP
    9. MVC (not required, but very useful)
    10. XML
    11. XSLT
    12. XSD/DTD
    13. HTTP/TCP/IP
    14. DNS/DHCP
    15. Ad nauseam…(feel free to add to this list)

    Combine the above with the fact that each of the big 4 browsers (IE, Firefox, Chrome, and Opera…yes I left Safari off this list because on the LAN it is very rarely used) have their own individual quirks as to how they implement the standards, and also how individual dynamic web languages generate code, and it gets pretty maddening. Don’t even get me started on the nastiest language of all, SQL (though data wrapping generation tools are getting quite sophisticated, specifically LINQ and the Entity Framework in .Net, as well as ActiveRecord in Ruby…it’s quite possible to write entire applications now without writing a single line of SQL, though all developers need to understand the underlying SQL that gets generated).

    Then we get into the language/platform agnostic parts of software engineering. Learning new languages, performing object oriented analysis and design, reusing code, eliminating cross cutting concerns (dependency injection), configuring servers both physically and logically, database design (which thousands of books are devoted to), production debugging, unit testing, integration testing, functional testing. I could go on, and on, and on…the point is that it’s pretty overwhelming when you take a step back and look at all the different moving parts that make a useable application, well…useable. Sometimes I take for granted what I’ve learned after over a decade in this industry and have to remind myself that (while I’m still by far not an expert) I was once completely new. But I also wonder what it would be like to get into this industry now, given that the web has changed EVERYTHING about what we do for a living, and hell…how we live outside of our careers in general. Remember life before Facebook? Before Wi-Fi? Before smartphones? Before email?

    When I was at Columbia University, I’d often walk by Rodin’s “The Thinker” and could feel exactly what it was created to represent: The struggle with dilemmas, and also the frustration of trying to understand and make sense of it all. In the end, what I think makes a software developer successful is the ability to adapt, not fight change, and the drive to constantly improve ourselves and learn new tools. The programming landscape is constantly evolving, and hell I fight it from time to time (e.g. I am a complete CSS idiot, and have been fighting that for a while now…mainly because it’s such a quirky spec and implemented very poorly across different browsers)…the biggest change in my entire career was basically forgetting VB6, learning C# and Java, and never looking back. I wonder what the next big change will be (by big, I mean something like The Web, or moving from different languages)? If I had to guess, it’s going to be something in the mobile space and how we access information there, and if I had a preference, it would be moving away from RDBMS systems and utilizing cloud solutions without having to worry about what the underlying persistence layer for data is, e.g. more platform agnosticism.  As a developer, I just like to create without being bogged down with the underlying implementation details. I used to love the details, but just want to produce things that “just work” at this point. Frameworks are moving towards this more and more, and I welcome it. so here’s to hoping for more high level development tools that allow us to create more, and drive that next level of innovation.

  • Back to the Daily Grind

    Time to fire this site back up after sporadic posting over the past couple of years. I’m back in Charlotte after my tenure in NYC, and am happy to be back home with my friends and family. I’ve also made my (re)debut into the IT realm after completing my studies at Columbia University. Coding for me is like riding a bike, and I feel as comfortable as ever sitting behind the wheel of Visual Studio, and I’m also ramping up on Sharepoint 2010 (it’s a different beast than MOSS 2007). Outside of Microsoft technologies, I’m in the process of learning Ruby, and in turn Ruby on Rails. So far I’m pretty impressed with Rails, and Ruby reminds me a lot of Smalltalk. One of the great things about Rails is that it forces MVC, and you can get a workable website up without writing a ton of code, and not much configuration (hence RoR’s motto of “Convention over Configuration.” I’m a strong advocate of stepping out your comfort zone, and in this case learning the RoR way of things will make me a better all around developer.

    So here’s to round 2 of my IT career. .Net 4.0 has some great new features such as thread safe collections and parallelism, and continues to become a better all around framework for GPP. And finally, my pet project for the year is to learn F# and incorporate it into some of my existing projects (can you tell that I prefer functional programming languages?).

  • To All My NYC Friends: Sadly I’m Not Returning

    To all my NYC friends, I've made the tough decision not to return. I don't know all of your email addresses, so I apologize for the blanket Blog/FB update. There's just been a series of events that are making it no longer an option for me. I will visit soon though after the dust from the holidays settles. You have all touched my life in ways that I will never forget. It was an amazing experience, but I realize now I was doing a lot of things for the wrong reasons, and I need to spend some time in Charlotte taking care of some stuff. I love all of you, and will be in touch soon. Hold down the fort for me, and don’t get into too much trouble in my absence!

  • Happy Seventh Blog Birthday To Me

    Seven years ago, I started this blog as an experiment; little did I know that after all this time I’d still be doing this. I haven’t posted nearly as much as I’d like since I got out of the IT industry, but it’s amazing how much has changed both in my life and the internet in general after all these years. I wouldn’t have it any other way to be honest. Who knows what the next few years hold in store for me…I’m looking forward to the journey though.

  • Windows Live Writer Beta

    It took me a couple of tries to get the new Windows Live beta package installed on my machine; the secret fix for me was to enable the Windows Firewall service (I disable it since I’m behind other firewalls), so if your install is failing, turn on the Firewall service. You can turn it off again after you’re done.

    The previous version of Windows Live Writer hasn’t worked on any of my machines for quite some time now, so it’s nice that the new version actually works again. I might actually start keeping up with my blog again, although in a completely new mode of content since my tech days are long behind me (professionally at least). If you want to test drive the new Windows Live Essentials beta, you can download it from here. The new Windows Live Messenger is worth the download alone in my opinion. Much more polished, and you can plug it into social networks like Facebook, etc.

    So let’s see if this new version actually works, and if it does look for more updates in this space. I have my blog linked to my FB notes, so this post should show up on my FB profile as well.

  • Matriculating Into Columbia University, Moving to New York

    I have the proud distinction of being able to say that I have been accepted to Columbia University (yeah, that Columbia...the Ivy League one) and will be finishing up my degree there. I'm still in shock that it's actually happened, that I get to fulfill my lifelong dream of attending an Ivy League institution...and Columbia at that which is IMO the coolest of the Ivies, namely due to its location in Manhattan. I have busted my ass over the past year in my studies, and it's great to see this hard work paying off. So long as all the logistics fall into place, I will be moving to the Morningside Heights neighborhood of Manhattan in early January to begin classes. All of my credits transferred, so I'll be enrolling as a Junior. I'm excited and apprehensive at the same time, but I have no doubt that this was meant to be. I have a philosophy of believing that things happen for a reason, and the more effortlessly they happen, the more they were meant to happen.

    And it would seem that I'm not the only one making a big move these days. My good friend Keyvan Nayyeri (Facebook profile) has also fulfilled a lifelong dream and is finally making it stateside to complete his Ph.D in Mathematics at the University of Texas: San Antonio. The internet sure does make the world seem awfully small sometimes, and the prospect of finally getting to meet this guy in real life is astounding. I'm so happy for him as I know he's wanted this for a long time now. I know he's going to do great, and I wish him the best of luck.

    Any readers of this blog (if there are any left actually) located in and around the NYC area, please feel free to drop me a line. Next post will be from the Big Apple!

  • Laparoscopic Cholecystectomy Tomorrow; Bye Bye Gallbladder

    Just a short blurb: I’m going in for a very routine procedure tomorrow to have my gallbladder removed. I’ve recently been diagnosed with Cholecystitis, and the pain over the past 2 weeks has been pretty bad at times. The surgery itself was scheduled over a week ago, so just waiting around for tomorrow to come has been the hard part. The procedure itself takes less than an hour, and carries virtually no risk of complications. The human body gets on just fine without a gallbladder…its only real purpose seems to be to get inflamed and cause the body lots of pain actually. Regardless, I’ll be fine. At this point I can’t remember what a pain free day feels like, so I’m very much looking forward to that feeling. Watch this space for more details.

    Sidenote: The medical student in me wants them to tape the procedure so I can watch it later on. How wrong is that?

1 2 3 4 5 Next > ... Last »

Copyright © :: JaysonKnight.com
External Content © :: Respective Authors

Terms of Service/Privacy Policy