
{"id":27,"date":"2010-02-15T22:38:29","date_gmt":"2010-02-16T06:38:29","guid":{"rendered":"http:\/\/jdharris.net\/blog\/?p=27"},"modified":"2010-02-15T22:38:29","modified_gmt":"2010-02-16T06:38:29","slug":"refreshing-old-skills","status":"publish","type":"post","link":"https:\/\/jdharris.net\/blog\/?p=27","title":{"rendered":"Refreshing Old Skills"},"content":{"rendered":"<p>I recently found myself in the position of needing to refresh my skills in a programming language that I haven&#8217;t used in nearly a decade. \u00c2\u00a0That language is C++. \u00c2\u00a0I&#8217;ve been happily living in the world of managed languages for the last 10+ years. \u00c2\u00a0Going back and learning a systems language like that after all this time has really made me appreciate managed languages like Java and C#. \u00c2\u00a0There are so many things in the development cycle that you take for granted in managed languages. \u00c2\u00a0It&#8217;s been really refreshing diving into something so low level.<\/p>\n<p><!--more-->The reason for this foray into C++ is work. \u00c2\u00a0I&#8217;ve recently been getting involved with the server and client programming of the MMO my company has been working on. \u00c2\u00a0I&#8217;m excited to be venturing out of my comfort zone (tools, processes, enterprise software) and into something that feels somewhat akin to the wild west. \u00c2\u00a0There are a lot of similarities with enterprise server software, but there are a lot of new areas to explore.<\/p>\n<p>Originally I just opened Visual Studio and started poking around in the cpp files, figuring that it wouldn&#8217;t be that big of a deal getting into it. \u00c2\u00a0It can&#8217;t be <em>that <\/em>different than the tools, can it? \u00c2\u00a0This worked fine for some of the basic aspects of the server, but that&#8217;s not where I needed to spend my time. \u00c2\u00a0I needed to dive into the guts of the thing, see what makes it tick. \u00c2\u00a0When I got deep down in there I started getting overwhelmed by all the templates, STL, multiple levels of indirection, custom data structures, non-standard memory allocators, etc. \u00c2\u00a0I took a step back, looked at my computer screen and decided it was time to get serious about this. \u00c2\u00a0I needed to get back to basics.<\/p>\n<p>Our server software is designed to be run on a Linux machine, but we cross compile it for Windows. \u00c2\u00a0Most of the developers work on Windows machines and we rely on automated builds run after SVN check-ins and cmake project file generation to make our lives more tolerable. \u00c2\u00a0Personally though, I like to be as close to the hardware my software is going to be deployed on as I possibly can. \u00c2\u00a0Now it&#8217;s time to get involved again with my old friend, Linux. \u00c2\u00a0I installed vim, setup my config files the way I like them, built the ctags and cscope databases and fired everything up.<\/p>\n<p>It&#8217;s still amazing to me how hard it can be to explore a large, pre-existing c++ code base. \u00c2\u00a0The navigation tools are very primitive. \u00c2\u00a0Finding references, usages, jumping between symbols and files and even class structures can be difficult and inconsistent in the tools available, especially when comparing against whats available with Java tools and Visual Studio plugins like ReSharper. \u00c2\u00a0But I&#8217;ve been sitting in my office for the last couple of weeks devouring all of the information I can get my hands on from the huge pile of books that I have sitting all around me and the web. \u00c2\u00a0I finally feel like I&#8217;m starting to get my head around this whole thing. \u00c2\u00a0Pieces of the puzzle are starting to fall into place and I&#8217;m feeling a lot more comfortable moving around and finding the information and resources that I need.<\/p>\n<p>This whole experience has been really good for me so far, if a bit frustrating at times. \u00c2\u00a0It&#8217;s made me go back and look at a lot of fundamental things that I use on a daily basis but have forgotten the hows and whys of them over the years. \u00c2\u00a0Going back to basic algorithms, the structure and implementations of containers, fundamental design patterns and, last but not least, memory management. \u00c2\u00a0I can&#8217;t say that I&#8217;ve missed having to deal directly with memory management on that level, but oh well! \u00c2\u00a0It&#8217;s a whole new world out there and a fresh perspective on old topics and I&#8217;m excited to be able to apply my skills to this as well and hopefully it will give me some ideas for cool new ways I can approach some of the game data tasks we deal with in the tools. \u00c2\u00a0Anything that makes the process for the users better!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I recently found myself in the position of needing to refresh my skills in a programming language that I haven&#8217;t used in nearly a decade. \u00c2\u00a0That language is C++. \u00c2\u00a0I&#8217;ve been happily living in the world of managed languages for the last 10+ years. \u00c2\u00a0Going back and learning a systems language like that after all [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=\/wp\/v2\/posts\/27"}],"collection":[{"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=27"}],"version-history":[{"count":0,"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=\/wp\/v2\/posts\/27\/revisions"}],"wp:attachment":[{"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=27"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=27"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jdharris.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=27"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}