Tuesday, October 14, 2014

Java Book Bootcamp - A guide for new developers


This isn't an exhaustive list but if you're overwhelmed and don't know where to get started with being the next Java rockstar .. then read these books and feel confident that you're getting broad exposure to the basics plus more. 


I like books ... so here's what I'm reading. I'm going to start with how I plan to create an entry point in understanding Java EE, Spring, and just overall hope to become a better programmer.

1. Grails in Action - Glenn Smith, Peter Ledbrook


This has to be the best Grails book on the market today. It very carefully takes you through building a real application while explaining the concepts thoughtfully and all the examples work..yay programming books that have working tutorials! I plan on spending the most of my time with Grails .. but going to have to know a bit more before I can truly get the most out of it. 



2. Programming Groovy 2: Dynamic Productivity for the Java Developer - Venkat Subramaniam


Man, I love this guy. His humor and gentle approach brings a very insightful view to anything he's talking about. I love watching his developer sessions and presentations. This is a great book on Groovy. It goes in depth and in great detail while still retains an entry level attitude so that newcomers (like you) or veterans alike can get up and running with Groovy ... which I would recommend you do before trying to tackle your latest Grails application.


3. Spring MVC Beginner's Guide - Amuthan G.



Moving from the top of the stack with Grails downward I will start with the foundations of Spring MVC - the de facto web framework upon which Grails also gets its good looks from. Remember, the Spring Framework is huge and Spring MVC is only one piece to the puzzle but is critical in understanding to get the most out of Grails and other technologies that derive from it. This book goes through a brilliant, beginner friendly, introduction into the Spring MVC framework and walks you through all of the major concepts like controllers, data, view resolvers, services, internationalization, tag libraries, and REST - truly equipping you with the fundamentals of modern Spring web development. This book implements these concepts while walking you through a sample application. Each example builds upon the next and again - the tutorials work flawlessly! The book recommends use with Tomcat, Spring Tool Suite, and Maven. 

**Remember all of these books assume you are at least familiar with Java and basic to intermediate Object Oriented Programming principles such as design by interface, dependency injection (Spring books will go more in detail), polymorphism, inheritance, classes, enums, and the whole nine yards. None of these books are intended to teach the Java programming language. They are intended to teach you how to build web applications with Java and frameworks built upon the Java platform***

And now you see I started at the top with Grails, which is at its highest level an implementation of modern web design, model view controller architecture, and Spring based Java/Groovy programming. However the Spring framework and Grails are just one stack of technologies which derive themselves from the most basic and low level set of API's which make all these fun technologies possible - Java Enterprise Edition

Now it's time to learn where babies come from!


***Only start at the top immediately if you're anxious to get started with the latest and greatest from the Spring stack .. otherwise aquanit yourself with the basics of Java web development first using the core JEE7 API'S .. which is what I would recommend. Then you'll see what makes Spring and Grails such a great addition to the ecosystem***





4. Java EE 7 Essentials - Arun Gupta



Arun Gupta is a HUGE name in the world of Java. He started working at Sun Microsystems back in the late 90's as an original member of the Java Enterprise specification. I urge you to watch his talks. He speaks at Java One, Devoxx, User group videos on YouTube plus more! Now there will be a few Java EE books listed and this is for good reason. Lets say you don't want to become a true Java EE guru but you want to understand whats going on under the hood whenever you work with other frameworks like Spring and you hear things like Dispatcher Servlet, Transactions, and Bean Validation. This book is not a working tutorial but is a great code driven overview of the newest features added to the Java EE platform. This book starts from the beginning and goes into great detail about the core Java EE stack covering topics like Servlets, Java Server Pages, Java Server Faces, Enterprise Java Beans, Hibernate and the Java Persistence API (JPA), and not to mention RESTful web services using JAX-RS and he even shows off some of the latest and greatest in the industry with Web Sockets, JSON processing, and Batch applications. Definitely read this if you want to get caught up to speed. Consider it like your cars owner manual ... just not as boring. 


5. Professional Java for Web Applications: Featuring WebSockets, Spring Framework, JPA Hibernate, and Spring Security - Nicholas S. Williams


This book is a nice middle point between some of the basic Java EE concepts, general web development concepts, and an introduction to Spring. This book starts at the beginning and goes over the basics of the Java EE platform with Servlets, JSP's, Hibernate, JAX-WS/RS web services, Web Sockets and then moves its way into introducing the Spring Framework with developing MVC applications, Spring Data, Spring Security, and talks about Java build tools and IDE's. So definitely if you want a broad hands on, code driven tutorial approach - then this book is definitely a good one to get started with. However there is one caveat to mention. The author uses IntelliJ IDEA throughout the book for all of the code examples and projects and makes it clear that purchasing the Enterprise version is recommended for making most of the book and its features. Many of the concepts would still work fine in Eclipse or NetBeans, but just know that to directly import the source code and have the most accurate reference, you must have IntelliJ IDEA. 





Since I put out the last post about my view on JVM technologies in the world its time for a little update as to how I'm getting caught up. I had been playing with Grails and trying to understand it but there is a reason that wasn't working as well as I wanted it to. 

Right now looks like a revolutionary time for the Java platform. I stated in my older post that this reputation coming from the other side about heavy EJB's, XML hell, and outdated language features was something of the past. The largest companies in the world are able to build responsive, modern, powerful, and highly scalable application solutions with the Java platform and its surrounding technologies. You can start from the highest level and look at the Grails framework or Play! 2 framework. One written in Groovy, the other Scala. These frameworks give the Java community a way to get applications working within minutes and focus on productivity and innovation rather than infrastructure and configuration. Of course Ruby on Rails changed the game .. but so did Java. Long before Ruby on Rails came along. Now we just have the pleasure of being able to combine fluid productivity with the stability and power of the JVM. This is all fine and dandy ... for most everyone reading this. But for some .. say like me. It's actually not that good. I'll explain why. 

Well when reading Grails in Action or watching an online tutorial it doesn't take long to know that many of Grails components are based on the Spring Framework and Classic Java EE API's. Well there's your first problem. What's the Spring framework .. and what's Java EE? I thought Grails was Grails, why can't I stick to that? If you're a new developer you may see all these cool features of these highly productive frameworks and want to dive in full blown ... but the problem is these technologies are high level abstractions and improved implementations for technologies that have already existed for quite sometime. Hibernate, Spring Security, JAX-RS, <-- You see, I don't think that its effective to dive into the "new Java world" without having a clue to what the true foundations are. Actually, if you want to talk about Java EE, I have been trying to put these pieces together and understand everything and I came across a wonderful tool that I am absolutely saved to have found --- JBoss Forge. Forge is a rapid application development tool that can get even the largest projects up and running within seconds. I thought well hey this is fun! ... Yet I don't know the implementation details and the true features of everything its doing for me behind the scenes .. I don't..really know Java like I should. You can ignore this yes .. but why live on the blindside? Are you looking for a job? There's going to come a time when you really need to know whats going on under the hood. I do think I'm right on this. I have been using Forge as a great learning tool to help me in understanding the core Java EE technologies and API's ... with that I move to a deeper and more understanding view of the Spring framework. Spring Batch, Spring Data, Spring MVC, Spring Boot, Spring JDBC, Hibernate, EJB's, Dependency Injection, Servlets, JSP, JAX-RS, JAX-WS .. yeah you see those are a lot of terms. Notice how none of them are "Grails". And now maybe you're catching on to the reason why that is. 

It is critical for a new developer to not just jump in but to stick your big toe in the water and creep in slowly. I have taken it upon myself to know whats going on. I wasn't back in the day building J2EE apps in the early 2000's .. we just got here. The game is different. You're in a different position. Rather we like it or not...we need to play catchup. This goes for any platform or framework. When I was a .NET Power Ranger I had spent 5 months with ASP.NET and didn't know what a data grid or view state was. I created a Web Forms project and was like .. what the hell is this? ... "That's ASP.NET" .. huh?

Really this is also about not knowing as much as you think you should and becoming overwhelmed or discouraged. We don't have it like the old timers before us. We are growing up in light of new technologies .. not assembly language, C, and Java 1.0 ... no we are in the era of big data, NoSQL, 100,000 Javascript frameworks, REST REST REST REST REST REACTIVE REACTIVE REACTIVE REACTIVE .. there are terms and technologies surrounding you and you need to admit that we need to take a trip back to see where the true innovation lies. Why does Spring Boot matter? Well..you never worked on an enterprise project with Spring 1.0.0 .. so how could you appreciate Spring Boot or Grails as much as someone who is much older than you? This is at least how I see it. We're coming into this thing seeing these technologies and these programming models thinking this is how it has always been. I'm going to learn and understand why I like Grails and why I like Forge ... by trying to at least familiarize myself on the same level as everyone else who may have more experience. Know your stuff. 

Wednesday, September 24, 2014

C, Machine Structures, Algorithms, and Low level design.

I'm happy with the direction my life is taking. This blog started in April and was designed to monitor my progress along pursuing a career in software development. I have expressed on this blog how my path has changed from when I first started college. All of this comes from my passion to not just settle with a high level overview of how this digital world works, but an in depth study into how people are building the new world we live in. Tinkering, hacking, researching, and ultimately a commitment to learn to do it myself. I knew the difference between Information Technology in practice and Computer Science when I first started. I began studying for certifications and working as a computer technician knowing that I wanted to work with these systems and was content with being the IT guy. Let the engineers and Computer Scientist design the systems .. I just wanted to play with them. Juxtaposed in relation to a mechanic and mechanical engineer. Then the shift I described began to take place and I wanted to know deeper, play harder, and study longer. Tinkering with websites and watching YouTube videos began to be more commonplace until the day on April 12th when I said I wasn't going to be scared to dig deeper anymore and I wanted to learn how these systems that I love playing with so much, were constructed. Since then programming is something I have been ever fascinated with and my technological paradigm regarding my career and academia, shifted. I spend most of my time with web development and have openly stated that this is the area in which I want to delve. Knowing the innards of the HTTP protocol, Java, .NET, Javascript, responsive web sites, rich web applications, etc., I still want to be a back end web developer and create web services, work with the database, and spend grueling hours making sure users have pretty data to look at. But again .. I find myself on a quest for more. I pick up my cell phone and can no longer use it as a regular user but am thinking about activies firing off requests to Amazon Web Services and what type of negotiation is happening on the service layer ultimately delivering my YouTube video safe and sound. I want to know how my cell phone works ... so I built an Android application. I want to know how my computer works so I looked into the history of Windows development .. I think this is contagious and hopefully 21st century educators are doing more to incite this type of thinking. Well .. I'm a Linux guy now. Love Linux to death. Thinking of completely replacing my host systems at home with Ubuntu and developing full time as a command line hacker. Hell, I may even buy a MacBook and get some square frame glasses! 

I digress ... (I do that a lot) 

Linux is not just an operating system but the most successful open source software project known to mankind. With over 15 million lines of production code, 2,000 developers, and over 100 different distributions .. Linux has changed the world in which we live. Remember, up until recently I thought the world ran on Microsoft. So yes, I'm still giddy about this open world I am now aware of. 

I don't want to change tracks or throw another set of books on my desk that I'll never read but this is something else I'd like to view from the inside out. Systems programming has been something I always said I wanted a taste of regardless of being a web developer or not. Increased use of mathematics and algorithms, operating system design, computer engineering, C and machine code is a world all its own. But the operating system is the fundamental building block of everything we produce. After all, web applications are also hosted on a system which provides a public end point for the public to access its resources. I don't think there would be anything wrong with learning some systems programming and Operating systems concepts. I think it would actually be beneficial. Studying how the computer works at its most primitive level could only produce promising results in my current work, it is something quite fun and interesting, and I'm going to be more or less exposed to and expected to know if I'm going to grab a graduate degree in Computer Science. I'd like to know more about this lower level world. Cutting through layers of abstraction and getting more intricately involved with technology should be quite exciting. So I'm not going to completely distract myself with my career goals but I have picked up an online course and a few textbooks and am going to learn a bit of new information. I'd like to learn how the code I write today works its way down to the lowest level of hardware and instruction and executes what I tell it to. I always said that at some point I would learn C. Being a younger developer in the new age, C isn't the first language we're exposed to anymore. Learning C and understanding where these newer technologies got their quirks from should help me in every aspect of computer programming and development. So I'll keep updating the blog with what I'm learning of that. 

Well, I still have a good bit of my lunch break left. Time to go fire up a terminal and learn how machines work!


Happy Coding. Happy Learning. Happy Living. 

Thursday, September 18, 2014

The World Wide Web and the JVM

I was surprised to log in and see some page views. Maybe some were from me or maybe someone stumbled upon the page. If so, that's cool. If not, you know I've said before this blog does the most good for me. It helps me organize my thoughts and keep up with things. So if you're reading this... cool :)

This is a long needed update. A lot has changed. As you can see its been a while and my journey has taken a pretty unexpected detour from what I had previously been documenting. 

When this blog started back in April of 2014, I had purchased a few C# books and enthusiastically talked about how I was going to follow my plans through to becoming a programmer. The focus was very strict. C#, ASP.NET MVC, Javascript. 

Along the lines there was a switch. I spend a lot of time searching the web and watching YouTube videos. Any self learning technologist would course. And I began to come across websites like Coursera and Udemy. I searched for different types of programming courses and was watching computer science courses on YouTube to supplement my knowledge and everything was in Java. Pretty much all the CS courses and the majority of Udemy and Coursera used Java or Ruby as the preferred language. Of course I can understand this. These are cross platform open source products that can be ran on both Windows and Unix systems. C# .. seemed more of a specific area type deal. Either you were developing for the Microsoft platform .. or your'e not. And that kinda got me thinking. I began to see all of these amazing frameworks. Project after project and community after community. I had never seen so many creative things. Yes there is a lot you can do with the .NET framework... but at the same time ... is there? I mean .. not to the extent of what there is for Javascript and Java. I fiddled with basic tutorials and watched some of the lectures and of course having been programming in C# for about five months .. Java came naturally. Well of course it did ... everything I had been using in the .NET framework. .. it all came from somewhere. What is the original de facto standard of the web? Who was the first to put portable and accessible object oriented programming anywhere on any platform .. who created the basis and set the precedent for so many other projects and languages that came before it? C, silly! But no I'm not talking about C here....Java. The answer is Java. What I had understood about Java before was that it was this older language (barely older than Javascript) that was really popular back in the day but was fading out and many said it was dead for the enterprise all together .. and really I had pictured it as this .. basically old language who set the bar back in the 90's but had been replaced by .NET and there were 100 other ways to do anything you wanted without Java. 

Seems I was wrong

When looking through all of this and still pretty immersed in C# .. I wanted to build an Android application. It looked really appealing to me, I loved Android, and it was something new just to do a brief experiment with. Well I had Xamarin studio (free version) sitting on my taskbar and I could have used that to build a small app. .. but then came across multiple Android courses on Coursera and Udemy and even YouTube .. and thought why use Xamarin? Oh well...what was so bad about Java anyway? The syntax is so familiar to many other languages I thought .. so I might as well give it a try. I got a book for Android and some Hello World tutorial videos from YouTube. The best of these is here. And I downloaded the Eclipse based ADT and took it away. 

It was fun..

So I did more research and made a few more Java programs and realized that it wasn't some monster and was thinking that this was pretty cool. But then the really big topic came up .. and with this topic is probably where a lot of the negativity and notorious reputation of complexity came from .. Web Applications. 

Yes .. now here is where I would see Java just not kicking it anymore. I had read the horror stories of Java EE and saw how you had to filter through a myriad of tools, which all have different configuration, and then finally get a server up and running, parse through one million lines of XML and do something with beans? Wasn't too sure about that - and then finally Voila! A Java EE web application! 

yeah yeah .. so I watched a few videos and experimented with Servlets and JSP and then started thinking .. yeah I can see how this was pretty good back in the day and it made a lot of things possible .. and I'm sure many are still using this technology today .. but its' just too verbose. I mean .. we have better options. One you could just skip out on this server nonsense and go full blown Javascript if you wanted .. but lets say that wasn't the case then anything could have been easier than this. Particularly what I had in mind was Ruby on Rails and ASP.NET .. These two technologies I was pretty sure at the time ruled the world. If it was a modern, responsive, data oriented enterprise web application .. then the world had to be running either Ruby on Rails or ASP.NET 

You have to understand .. before doing all this research .. I came to realize that I thought .NET was THE biggest thing in web development. I thought the world ran on .NET and that this was as good as it gets. 

Again ... so damn far from the truth. What I found was shocking. 

** I was going to input a bunch of charts and numbers here but I got lazy .. so just take my word for it .. java is everywhere**


Well so now at this point I watched a course on Pluralsight called Java Web Fundamentals and saw kind of the general Servlet/JSP relationship worked. After knowing more about Java and that it is still a useful and viable language I had of course said that it would be worth learning. I would be encountering it more in school and online and of course it wouldn't hurt to have another tool in my arsenal. So things didn't really get going until this point. 

I wanted to look at the things I was currently working on with .NET and find the Java alternative and compare how things in worked in these two different eco systems. Well, surely there had to be an MVC approach to developing Java web applications. 

Surely there was ... I found many. 

Spring MVC ... lets start here. 

Upon looking around I came across the Spring framework. The Spring framework is a mature platform for Java enterprise applications. In general it appeared to be an IOC service but then found out that the platform has many things to offer. Since at that time I was doing ASP.NET MVC development I thought that I would check out Spring MVC. I looked it up and got more familiar with the Spring framework and saw how things went together. I found a lot of things that I liked and things that I thought resembled ASP.NET MVC very much so. Still .. it really wasn't the icing on the cake. It looked like a very capable and mature MVC framework .. but alas .. we're coming to the best part about the Java platform 

Options.

There are so many options and different things to do within this ecosystem and Spring wasn't the only player in town. 


Since this point I started studying and researching various technologies like the Google Web Toolkit, Vaadin, Wicket, Struts 2, Spring MVC and more.

Here is a comprehensive list and comparison of the major Java web frameworks and could help you make a decision based on what you're looking for.

Here

So Spring MVC was fine and dandy .. more or less I was comparing it to ASP.NET and what I could expect using the platform. There was still a good bit of XML and it did seem to be a pretty viable and sturdy solution for large enterprise apps .. but I was looking for something different. Where was the easy framework that allowed me to click a button and get up and running?

Let me explain that a bit..

So what I really like about the .NET framework is that when working with ONE vendor, ONE IDE, ONE platform .. you can expect ultimate compatibility and productivity. If you open up Visual Studio 2013 right now and create a new web application, VS will bootstrap a fully functioning, RESTful, and responsive web application to scaffold up and get working with .. and then with one more click you can instantly deploy it to Azure and have it running online. I really liked this ease of use and "point and click" mentality. I was getting frustrated with this when discovering Java alternatives because noting appeared to me to be that out of the box and standard. One of the downsides to having so much freedom and so many options is that not everything stays the same overtime and there is many ways to just setting up a project .. there are tons of cloud services like Heroku and Cloud Foundry to work with and there are even different tools for building the application structure .. for instace, Maven and Gradle. There are also different IDE's like Eclipse and IntelliJ ... so when following along with tutorials a lot of times things wouldn't work for me right out of the box because usually there were dependency problems, out of date packages, and different IDE settings that I would have to filter through to finally get working. I was kinda losing hope on productivity ... until I discovered a few more things. 

The Play! 2 framework.

Now .. I ended up with Play! 2 after watching an outstanding video. This was what I was searching for! Hell, this wasn't comparable to ASP.NET MVC .. it was better! I was able to get an application up and running ... no Tomcat configuration .. the server was built in .. it was fast... I was able to get a sample app up and running and I was really having fun. I watched a course on Play! and decided to not learn Scala but go with Java .. things were going well with this but I didn't really stick with it. 

After messing around with more stuff and doing more research I of course was coming to a few conclusions. 

Everything I was in awe with the .NET framework was just technologies from Microsoft to solve problems that had already been in existence. I thought that everything like WPF and ASP.NET MVC was revolutionary .. no this was just the Microsoft version of it. There was a domain of choice between everything with Java and Microsoft. So now my eyes are opening up and I am realizing that that Microsoft doesn't run everything and there are many options. If I want to develop a desktop application I can use JavaFX .. or WPF. If I wanted to develop an MVC application... you could use ASP.NET or you could use Spring MVC .. I realized honestly .. that Java had already done this first. Upon research I'm basically seeing Microsofts attempt to throw a technology into every domain that had already been done. Like they were catching up to speed. Basically what I'm saying here is that there were many options to do everything you can do with the .NET framework long before Microsoft came around.

So that's what did it .. why am I using the .NET framework? Yes, it's good to know because it's in demand .. but am I limiting myself here? I kinda felt that way. And instead of making this strict lesson plan and learning every MS technology and then getting my web development certifications for Microsoft I decided that it was ok to play around with a different technology often and leave your comfort zone. I would in fact recommend it. 

So back to the point ... I have realized yet another thing. The Java language had been called old and had many critics that were quick to say that it was lacking modern features and that C# was way ahead. Java means both a platform and language. The Java language isn't the most advanced language ...it doesn't have every single feature that every other language in the world has .. but it doesn't have to. Because I saw the real reason that this was worth pursuing. It wasn't really about Java as a language at all .. it was the JVM! This was what was making so many things possible. The JVM to this day is still a revolutionary eco system filled with many capabilities that has helped us shape the world we live in today. It gives architects so many options and freedoms when wanting to create something of their own liking that they can use with the versatility and sheer power of the JVM. You can be on the JVM and never write a single line of Java code. ... ladies and gentlemen you can't do this with the .NET framework! This is where comparing things ends. Maybe these two technologies aren't so identical. I'm discovering that this is a community that I want to be a part of. I like the JVM and think that there are many possibilities for more advanced frameworks in the future. I think "making the switch" is definitely well worth my time. Scala, Groovy, Clojure, JRuby.. these are huge projects and entirely new languages that can be implemented on a familiar, stable, and pre existing platform. Working with the JVM gives a developer, particularly a web developer, more choices and powerful options than I've ever seen with any other language or framework. Now one of the languages listed above is the topic in which this article is going to be closed. Groovy is changing things. Groovy has given Java developers the ability to write dymanic, concise, powerful and expressive code for the JVM while using a syntax like Ruby. Groovy really is the turning point for Java in my opinion. This is my preferred way to write programs for the JVM and is where I am attributing most of my time outside of work. Groovy gives the Java platform modern features, powerful and productive performance, and a new way to think about the future and capabilities of the Java platform. 

Why Groovy .......... one word...

Grails

This is it ladies and gentlemen. The reason for this post.The reason for this update. And the reason for me no longer caring to write applications for ASP.NET MVC. Grails is the king of Java web development .. and truly may be the best decision for your next project. The only reason I say may is because of course to use Grails you already need to be in a Java environment. If you're using Ruby or .NET or PHP then this really doesn't matter. But Grails ... has changed the way we look at Java Enterprise Application development. Finally I found something powerfully expressive and easy to set up. Scaffolding, built in ORM, RESTful capabilities that far surpass that of .NET. ... This really was what I was looking for. I plan on putting a lot of time into learning this platform and becoming very proficient with the Groovy language. I like it better than ASP.NET. I think its more powerful and capable than ASP.NET .. the Groovy language beats even working with C#. .NET doesn't have a way to give developers Ruby like productivity plus keeping the power of the platform. I advise you to try it out and see how nice it is to cut out all of the fluff and really focus on expressively creating applications. I think that Grails has created a new future for Java web development and there isn't a reason to validly look at Java as some outdated web app technology that we have better opportunities for. The freedom to make these new technologies like Play! and Grails is really why I think an open community and technology is the best idea. That is what you don't get with .NET. Java web development isn't some pre historic history lesson. The JVM is modern, it is powerful, it is fun, and it is still the dominating force in application development today. I am excited to see where this goes and am happy in making my decision to learn this framework. I think we have something very good on our hands. So this is the official update that I promised to give. Why if you start following me online now you're going to see Java things instead of .NET things. This is the reason for it. Same goes professionally too. I am currently working as a Linux administrator and I am loving it. I love open source, I love Linux, I love this field and wouldn't have it any other way. I still plan on making a full time career out of development and I am still actively pursuing this as well as school. As far as a development job goes .. Java will be what I look for. I don't hate .NET and I would still work with it of course. But Java is the technology that, moving forward, I'd like to spend most of my time mastering both in and outside of the workplace. 

So still working and learning as always and am counting the days until that beloved "I am now officially a Software Developer!" blog post comes through. 

My life. My technology. My journey. 

I'm having fun and I sure hope you are too. Because there really is no better place to be than learning, growing, and building our world together.

Happy Coding. Happy Living. 



Sunday, August 10, 2014

Hello Android. Yes ... Java Android. Update Pt. 1

Well hello there. Hello to you or hello to just me if no one else is reading this. I see its been a while. Yes, a few things have happened. I've changed a bit. My identity as a developer is ... developing? And my focus is a tad bit different. 

So .. Microsoft doesn't run the world .. by far. And their technology isn't the answer for everything. It couldn't be. I'm not saying they ever said it was but perhaps I was treating it that way. I thought that I was learning a lot of information and taking it in stride but perhaps my learning path has been quite narrow. I have seen some people say they picked one technology and day and night and day and night they hacked away at that one technology and then bam got their first job and this and that. That may not be how we have to operate. I just like having fun. I reached out to a mentor and told them that I feel like I am deliberately avoiding technologies that I find interesting because I'm supposed to be learning C# and the .NET framework. Well, specifically I'm speaking of Android. Yes, Android is awesome. And I just randomly picked it up. Out of nowhere .. it had been a technology I have thought of and definitely acknowledged and mobile development is something that I, at a later time, wanted to pay attention to and perhaps learn. And by mobile development I mean Xamarin ... *gasp* .. who ever thought of not using C#? 

What's wrong with Java?

Nothing. 

It's another technology ... to pretty much do the same thing that you are doing in C#. C# has different ways of doing certain things ... and I actually prefer many of those ways. I like them and I find many things about C# proficient, whereas Java is lacking. Such as Properties (God I miss automatically implemented properties!) and LINQ. Those are a lot of the time are the biggest features right off the bat you'll hear about C# and Java comparison. Also the way in which Java handles types. There are no value types in Java. But anyway ... 

Getting focused on languages is easy to do but at the end of the day the languages exist to get a certain job done and I have been told by mentors and teachers that programming isn't about the language ... it's about programming in and of itself. Languages are just tools to get things done. And if you're a veteran C# programmer .. if you tried Java .. yeah first thing you may say is "Yeah, this is definitely familiar" and then the second thing may be "Yeah, definitely like C# better" .. but then again it may not be. Point is ... the end result that I have observed so far is that there aren't too many things I couldn't do in Java that can be done in C# as far as getting the job done goes. Actually, Java is cross platform and many of its tools are free and open source .. which is actually a big plus for many development environments. Java runs on the server, on the client, on your phone, on your tv ... pretty much everywhere. It is still a relevant and powerful language and I'm going to enjoy doing what I need to with it. Right now that would be Android. Android just looks like a lot of fun and is a very powerful and influential technology that I want to be able to have some control over. Not sure I want to be a "Java programmer" or "Mobile Application Developer" not saying that ... but if you see something interesting ... just do it. Career wise .. my goal is just to be a developer. Get paid (that's the job part) to do something I would be doing even if I wasn't getting paid. (that's the career part) ... So with that I plan on embracing any technology I see fit even in this early stage of my development. That was the controversy and what I battled with. Well I have all of this stuff on C# and the .NET framework and this is what I was going to tackle first and MCSD certifications .. WCF, ASP.NET, ... the list goes on. Well thats not going away ... Java is right next door. I plan on approaching things more broadly. One of my mentors actually said that not only was my pursuing Android a good idea, but that Java and C# are so closely related in similar areas that programming in one would improve my ability in the other. Tools are tools. Being a better software developer is what I care about and I'm sorry but that's going to include more than just one tool. 

So that's that update ... looked a little different from some of things you had seen me post earlier. C# gung ho and what not ... still am .. just approaching things differently. So you'll see some Java code, Javascript code, C# code, X code, Y code, Z code, little bit of everything as time goes on. And speaking of seeing code. .. 

Codebonanza.azurewebsites.net (later to be just codebonanza.com)<--- that is the future home for articles and code related things ... at least for now. I created that site with wordpress and just wanted to pick a blog/site with a different feel for something more permanent. If and when that does happen full time you will see the last post on this blog to be a notice that I have moved locations. But I am going to keep this blog alive for the days to come to always have an original reference point for nostalgic reflection regarding my development journey. 

I am shifting. I am growing. I am becoming more secure and interested as the days move forward. Not just rushing into a job but knowing what you want to do and make it better. Being a well rounded technologist in many domains. Being a specialist. Being good at what you do. Something to cultivate and put work into. That should make most of us proud and we (should) all have that part of us that plants us firm. Technology will forever be my hobby and career but alas, even it is just one part of me. One part of my future. One part of my day. Still, I don't think any of us should have one thing that defines us. Life is too short. And that means its too short for just one thing. I am young and am growing in many ways ... I will be married next year and will have a family soon. The days move on and many parts of me grow, not just my relationship with technology and my career. In the end I am happier than I was yesterday. I just realize there is a lot of work to do in my life. I'm moving there. One day at a time. I am driven. I am confident. Most importantly .. I am humble and eager to learn. 

Happy Coding .... no ... Happy Living

Sunday, July 13, 2014

Learning C#: Basics, In Depth, Design Patterns

First off let me say there is no formula or true time table that I am providing. Since chronicling my pursuit of software development I have made multiple references to certain books and videos along the way, but now I'd actually like to come back to those books in more detail and discuss how they can play an important part in a new developers journey. I suppose it may look like an in detail book review at first. But I'm really not reviewing the authors work per se but sharing how it has affected my learning process in hopes that reading them the way I did would help someone else. I follow a lot of social media and I saw some ridiculous comments. For instance one said something like "I want to start programming one day. So bad. I want to learn how." Surely, I thought everyone knew how to utilize their resources and dissect the vast dimension of information that surrounds us. That person most likely had a smartphone or tablet. There. They can learn to program. At some point it hits that person how badly they really want to learn something, then they'll stop at nothing, collecting resources and asking for help, until they're satisfied. Which for development - may be never. I think it will take about ten years to learn C# effectively. Maybe longer. Maybe my entire career. The technologies a developer will be exposed to, at the pace they will be exposed to them, should reinstate the need to live in a state of constant learning. 


"I can't learn from books. It's not my learning style."

That's a shame. 

If you've been following my blog at all you'll know my two main sources for learning are books and Pluralsight. Books help me tremendously. I can have text in front of me with code laid out and follow the code line by line while the author explains what each piece does. I have never seen such a thorough style, other than that of Adam Freeman. This author starts off by giving you a high level overview of the technology you will be learning. Then he blasts you with building a fully functional application, that of course you have limited knowledge of, and then he goes throughout the other half of the book explaining in detail why you typed every line of code you just produced. If that seems odd .. it is - but you should really give it a try. Because it's less about a book and more about doing. I feel that books allow you to do a great deal. At least that's me. However, I use Pluralsight to fill in the gaps. Pluralsight is helpful because it provides you with a visual representation of what you should be doing. You get to see an actual person write out code and explain to you what they're doing. If you use this in conjunction with a book and in conjunction with building your own projects while following the examples of these materials - then you are spinning through a trifecta of learning goodness. So maybe you could benefit from my next few paragraphs. 

If you are a BEGINNER to C# and Object Oriented Programming - Get started with these books and in this order:



This is a lengthy introduction to the absolute fundamentals to the C# language, Object Oriented Programming, and the .NET framework. Mr. Sharp lays out each example in exquisite detail, providing sample source code to follow along with, and everything you do builds upon the previous lesson. Detailed chapters, in depth coverage of the language, and exercises to practice with. This book was truly the turning point for me. I really understood in depth of what I was doing and things were finally clicking.

Look, about what I said above earlier - I am not out to discourage a learning style or disrespect those who cannot use a particular style. Really, a lot of what I am saying has to do with some of the negative things people on forums say about books as a learning resource compared to just diving in code without knowing what you're doing .. maybe reading an MSDN article here and there. (<-- Which you really should do everytime you don't know what something is!) 
So if you're a beginner, just start here and stop thinking about getting started! Yeah and another thing. These books cost money. Oh no!!! 

Yeah - your career is worth money. Your passion is worth money. You will find money. If you want a Pepsi bad enough, you'll find a dollar. My Pluralsight subscription is 30 dollars a month plus about two new books a month which is usually about 80 bucks. There will be more money spent on on my passion/hobby/career down the road. So lets just not get into how wrong I am for asking you to spend money. Only about 20% of this process even costs anything - if that! Learning resources are just one piece to this puzzle. Now we're moving on. 

Just give these a try - I want you to be successful. There are reasons why new developers fail. You can avoid this just by being aware of how learning works. I am finally getting better with structure and am making lesson plans and goals each week. I would highly recommend this. Your journey will be long. So now that I've made sure to defend books as a viable learning option for beginners - let's get back to the specifics: C#

After going through Visual C# 2013 Step by Step you should be able to scroll through the exercises and be able to reproduce whatever you see. Even if you don't understand it all at its absolute core yet - you should be able to fully comprehend C# syntax and program flow. You should be learning how things fit together and always open up Linqpad or a Console app and try everything you just learned! Please don't forget that part! Actually code! The title said "Three books - three months" Depending on your motivation, comprehension, and life schedule - these books may and very well will take less than a month to complete. However, I am using a month as a solid reference for the time to go through these pages time and time again - strengthening the concepts before moving on to something else. Just make sure you're comprehending. Read articles and forums, heck even start a Blog! To be honest with you, this blog is mostly for me so that I can look back and see how far I've come and compare my way of thinking about a subject to a previous point in time. It's a great way to track your progress. I can go back to my first post three months ago and then look at 60 days with C# and reflecting on what I have learned another month later, writing this post. So, get a blog. Get on Twitter. Get on Stack Overflow. Ask questions. Get involved and do whatever you can to figure something out!

While reading through the book above, reading articles, reading Microsoft documentation, and watching YouTube tutorials (this stuff is everywhere!) I would then recommend going in for a deep dive ... or filling in the gaps with this book here:


This book is a very well known -definitive reference - within the C# community. There are multiple editions out now as we are, of course, in C# version 5.0. This book is even more massive than the previous one an isn't quite a nutshell. I'm not of course going to tell you to hurry and read every word within a month. But as you are going through your other materials and you come across something you don't understand - it will be in this book. This book covers advanced -yet still ina a fashion of introduction- topics such as concurrency, networking, security, data serialization, native interoptability, and low level framework features. I would recommend you read as much as possible on a wide variety of topics. At least read through the first few chapters which covers, once again, the language basics and the more capable language features such as generics, lamda expressions, delegates and events. I will say though .. there is a partial alternative/supplemental solution to this big breadth of framework study.

Meet the ever so useful, much smaller, and much cheaper little brother to the nutshell:




C# 5.0 Pocket Reference


This little guy is worth your money! Yes, you could browse online to find a reference to any subject - but this book is directly linked to the one above, it's big brother, and is quite accessible and enjoyable for those of us who still like books printed on paper. The author describes it as "All the meat without the potatoes" I can see myself using this as a review before heading into a certain project. In fact, not only do I quickly look up certain features that I need to know more about at the time, I also read it cover to cover right before diving into ASP.NET MVC, to make sure at least some of the core language features were solidified. Great book. 

**Note very important - the .NET framework is so big. It's very fun. There's a lot to get distracted by. After a month of learning C# I tried to start building web applications with Web API and Windows 8.1 apps. Yeah .. learn the language inside and out. Take baby steps. Still play with stuff. Maybe a WPF application or Console app to solidify a new topic or experiment. But steady your ground with this language before moving into any framework or programming model.
**

Now, after you know some C#. Have been exposed to the fundamentals of fundamentals and have been writing programs for a couple of months. You are then ready for the most famously comprehensive, yet readable, work on the subject: 







This is for months later down the road. You may of course attempt to read it whenever you want. You may even recognize many things about the language and its evolving features. But to get the most out of this amazing book, it is recommended to have a working knowledge of C#. After you are comfortable with the language and have written C# programs there then comes a point in which you want to know why things are the way they are. You will want to see how things work in C# and the .NET framework/CLR. This book is a famous entry point for true master craftsmanship of the C# language. Jon takes you through C# starting at the end of its infantile days of version 1 and walks you through code, going through how each line has evolved, all the way up until version 5. Delegates, Lambda expressions, nullable types, Async/Await functions, LINQ, and much more. This author dives in depth and truly shows you how great and easy it is to appreciate such a beautifully designed language. 


These books aren't mandatory. Many haven't read them. However, I think all C# developers who care about the history and evolution of their craft should read Skeets' book. Again, this is my blog. And here I share things that have helped me in hopes that it could help you - the one who thinks and learns like me. Start from the beginning. Utilize these great tools as well as other resources you have planned on using and truly want to understand the nature and your craft. Learn C# and learn it thoroughly .. not so you can become the greatest C# programmer who ever lived .. or the next great theoretical computer scientist .. no. Learn this language well so that you can move on to the next. You will need more tools than just C#. But if this is your first programming language ... then I don't think there is a better place to be or a better time to get started. Go to MSDN and start looking into things in depth as you come across them. Download source code and practice with free tutorials. Use everything! And keep track of it all. Show the world. Even if it is a Console app that says "Hello, World" .. blog about it. Show someone. You made it. Be proud. Read these books. I will keep posting more links to other great resources. This post just covered a few books for just C# alone. This had nothing to do with WPF, Entity Framework, Code First, SQL, MVC, etc..

**Update: Design Patterns**

One more thing that I would like to cover here is something that I'll be studying more in detail as the months go by is the concept of Design Patterns. Design Patterns provide us with common and reusable solutions to problems that have been encountered in production. Some are simple and others can become quite theoretical and usable on large scale. I have included some great and sufficient resources that I have come by thus far. I'm sure you could find many more but these are quite recent and practical. 


Since I'm having you spend your precious money on all these books I'm going to stop speaking about Pluralsight in this mystical, optional, highly recommended way and just tell you to buy it already if you haven't. I really .. don't know what you're waiting for. 

Design Patterns Library - Pluralsight





This course is actually a collection of courses - "library" - which contains almost 16 hours of design patterns and their history/implementations. 


I would use this in conjunction with this book I found:


C# Design Patterns Essentials



There are many books out there about Design Patterns but this one has great reviews and was written quite recently and shouldn't be lacking any relevant features of the C# language. Remember that you should have at least a decent working knowledge of C# before trying to implement patterns and make use of them. It would just make sense to go through the books above and really be comfortable with a technology before trying to fully understand design patterns and software practices. (Agile, Dependency Injection, etc.,)

And if you want another great resource for those familiar with Java, then check out these great videos and code samples. To be honest, even though these examples are in Java, if you are familiar with C# before you begin watching these, you will be fine. Java and C# share a very large part of their syntax and programming structure. That and these videos aren't supposed to be a comprehensive introduction to the Java language, but instead are to teach and show the use of Design Patterns. 

Happy Coding

Wednesday, July 2, 2014

More Good Books

Hello geeks,

Coming to you today with a short reference to some nice books. I am always interested in sharing resources for learning new things about a technology. This internet of things is filled with information that anyone can make use of to do whatever they want to do but today I will go over a few books. Yes, books are awesome. If you remember what they are, I actually prefer them over anything else. I usually like to find a book on the topic that I'm studying and use it to compliment my Pluralsight videos. Books often contain hands on projects that you can code through with the author and then compare a beginning and end to a project. 




So the first book is a subset of the ever popular C# 5.0 In a Nutshell from O'Reilly, called C# 5.0 Pocket Reference: Instant help for C# 5.0 programmers








It is a concise book that covers every fundamental aspect of the C# 5.0 language and is very useful in production or for practice. I will probably read through it every once in a while all the way through whenever I want a general review because it isn't very long. Now of course everything imaginable isn't covered .. but if you need consultation on an advanced topic such as serialization, networking, or all the nitty gritty details of concurrency then please consult its larger sibling C# in a Nutshell (see link above).


Now on a more specific topic - Windows 8.1 Apps using C# and XAML. My core focus has been web development but I got really interested in store app development for about a week and wanted to explore a few different areas. I am not focusing a lot of time right now on Store app development. In fact, I am back to focusing on ASP.NET MVC but I did have fun learning about Windows Store Apps and would like to perhaps delve a little deeper in the future. But if you're wanting to dive pretty hard into Windows 8.1 development then the perfect book, which just came out very recently, is written by some very big name developers: Jesse Liberty of Falafel Software and Pluralsight, of course a Microsoft MVP, also Microsoft MVP's Jon Galloway and Philip Japikse - Pro Windows 8.1 Development with XAML and C#.


Definitely check out these books. I have actually added more than a few to my collection since my last post about learning resources so I will try to go into a little more detail with another resources post and also go over some really helpful websites and source code that I've run across. 


Happy Coding!

ps. If you want to check out some sample Windows 8.1 and ASP.NET application source code with tutorials then check out the MSDN code gallery and just figure out how stuff works and then apply it to your own project! There are sample projects and tutorials for C#, C++, Javascript and more! Out of all the books and videos you watch, make sure you're coding and applying the things you learn. 







Wednesday, June 25, 2014

When learning to program .... don't forget to actually program.

For those reading into my journey you know that there have been obstacles in my self education. Work, balancing my college education, etc., But most importantly is just learning something new and something so broad and empowering as software development. I'm not using the term "Web Developer" anymore. Is there really a web developer? I mean, I suppose if you create static web sites for a living. No, you develop applications .. which is also software - which can very much run on the web and with web services. I really don't know what application on any platform doesn't use a service to communicate with an outside source to return data. So we're all just "developers" or of course, "engineer". But semantics is far from my point right now ..

If this blog never takes off ... I'll know that it was because of my random tangents ..

Moving on..

With this it seems hard to come up to speed quick in this atmosphere. I don't think it can be done. I do read blogs and hear stories about people learning a technology and they were able to leave their job in a matter of months and start new careers in the world of development. While that is very much the case, and I do find those stories inspiring, especially Joshua Kemp and Iris Classon. While these individuals were able to find entry level positions using one language/framework ... if you were to visit their blogs now you'll see they aren't just writing about the language they started with. It's because they can't. When I look at job postings in Nashville I see a minimum of three different languages and frameworks even if the job title mentions only one. It's because this new age of technology requires an app to do everything. Not saying that a company would expect a developer to proficiently develop a full stack application alone (not saying that hasn't happened either) but if a company hires a C# programmer to take on an MVC data project then it would make pretty good sense for that developer to know what Javascript does and/or be able to survive in a mess of SQL commands. Bootstrap, Knockout, Angular, Web Api, data formats like JSON and XML .. to me at least, a non employed aspiring developer/student, that this is just the standard of the industry? Constantly learning new technologies because the job at hand no matter the platform is usually requiring a team effort with these technologies intertwined. So coming from the unemployed aspiring developer ... this is hard! I know that .NET and C# is the craft I want to forever perfect (at least today) but I'm not going to post my resume to many places without having some Javascript work to show or even if it is with client side C# and WPF - the ability to implement web services and concurrency. This is a modern world with new technologies, new needs, new possibilities, but new developers? Basically the way I see it is you better have a passion for learning and adapting ... and at the same time writing quality code of course. I make out lesson plans for myself. My degree isn't even in "Software Engineering" or "Computer Science" It is in "Computer Information Technology" so 80% of what I know is based on self education. I make timelines and I think a lot about what I do and what I do it for. This post is talking about the skills that new developers need to be exposed to before considering employment, but my motive isn't employment. I think it went through my mind in the beginning and believe me I really do want to earn a living doing what I love, but that's just it. I need to understand what I love and why I love it. I devote a lot of money and a lot of time to what I do not because of the promise of a large salary and a comfy chair ... but because it's what I can do to make a difference and what I can do ... to be me.

So .. pretty much the first part of this is saying that things in this industry move quickly and I feel that I have a lot to take under my belt before I can even get started professionally. I don't think one skillset is going to cut it even though that one skill set may be good. And if I do land a job on just the notion of programming C# code .. I can't see any reasonable development operation taking too long before the demands of my own job require me to be exposed to more. There's a lot to learn.

Now ... about how I kinda screwed the pooch.

While learning a new skill, it seems that one of the skills itself that is a pre requisite to the learning the craft of software development, is patience. 

Let's not forget more discipline than I think I was even born with. ..

I do mess with code every day and whenever I am exposed to a new concept I will open up a new project in Visual Studio  ... but it's not enough. I read too much. I watched too much. But didn't code enough. I'm hurting from this now I think ... yes, I also worry too much. But still .. there were many times where I read over concepts that I didn't fully understand and just continued reading and watching videos and then at some point I came back to code an entire application and realized I had screwed up. My time definitely wasn't wasted because I can see and understand the code and I understand what it means in my head but when you sit behind the compiler it is a different story. It's probably easier to understand a foreign language than to fluently speak it and master its laws. You have to know why you're doing what you're doing. You should sit behind your screen, open up a new project, and code that feature over and over and over until you grasp it fully. I would probably be farther than I am now if I had done that but still I am coming along pretty nicely. However, how do you know that? You don't. I don't have any beautiful repositories to flaunt. So my advice to anyone reading this who is just starting out ... just make sure to program. Make sure you code and fully understand everything without moving onto the next section. The reason I mentioned patience above earlier is because I'll be reading through an MVC book and trying to code my websites and then will randomly turn on a Pluralsight course for Windows Store Applications. That literally happened ... right now. I'm spending my day off tomorrow working on a Windows 8 application. But hey, that's just me. I see something and I wan't to do it right then and there. I'll pull up the documentation and find the answer to my question. Hopefully a trait I carry with me as I mature in my craft. 

Well this post has been long enough. This is another post about personal reflection for me. I share with you some personal things I encounter as a wide eyed developer and maybe you have had the same thoughts in your head as well.