DevOp Central
Programming, Systems Administration, and 100% Open Source.
Sunday, April 12, 2015
A year of commitment, a year of learning, and a look ahead to keep getting better.
I took a big moment to look back this morning at my first blog post. I immediately began thinking about improvements. One thing I have learned is that being a good Programmer is not something you can buy yourself into. I swear this to you. It is 100% self discipline and determination. Digging through code and gluing the pieces together yourself and then going back to look at tutorials and documentation to figure out why what you just did works or doesn't work. The most precedent thing to improve right now is this actual blog and my online presence. This blog is a failure. I have a GB or two of source files on my computer comprised of things that I have learned over the past year and none of it is here. I did not stick true to sharing what I learned and have kept all the enthusiasm to myself. Blogging is important. I still believe this. You need to write down your thoughts and keep your inner curriculum organized. Plus, the more you put online the bigger chance someone is going to see it and help you correct your mistakes or even better, become inspired by what you have done. This is highly evident in the Ruby community. Ruby is the language and environment that I have immersed myself in for months now and there isn't a single post on this blog or anywhere else. I am eager to fix that. Gems that I want to learn to use in my projects, creating gems myself, Rails applications, techniques, and just plain interesting things that I have found. I need to share these things. I have such a large list of vast topics that I find great resources on that I created YARP. Yet Another Resource Page. Something like Ruby Central or Ember Watch. It is called DevOp Central. It is a Ruby on Rails website and is in the finalized stage or production. As I said a year has gone by and I don't have a website or an assortment of project available for all to see. I know this isn't a complete testament of my abilities but it is still something I said I would stick with but got too caught up with work or just felt too lazy. So this is the true new direction. Dev Op Central will be comprised of resources and tutorials from the Linux/SysAdmin - Software Development worlds.
Monday, January 5, 2015
Update and new direction
Bit of a personal update. I am still working as a System Administrator in Tennessee specializing in Red Hat Linux, Security, Networking, and EDI. However, still not a software developer.
There's a reason for that.
When I started this blog I told myself there was no way I would start looking for a job until I knew this would work out. I thought that I would finish school and get a degree in Computer Science and then master the craft as much as I could in my own time while continuing to work IT. That is .. pretty much what is still happening. Except I've cheated that plan a bit. Not only have I looked for a job .. I've been contacted by recruiters who have seen online content. Most have produced the same answer - "I think you're heading in the right track but we need someone who can jump on board now". This is still encouraging to me. I wasn't even supposed to try out for a job. But I think I'm going to continue pursuing opportunities if they arise because whenever I receive feedback from these recruiters it is somewhat of a massive progress report. They let me know what they think and how I can do things better. I'm not going to be able to dive into an enterprise job until I have something to show. And despite what you may read on many "zero to hero" blogs .. the only way that happens is by rock solid experience from a company that actually hired you to be a software developer. At least for me in Nashville Tennessee. Blogs, code samples, developer challenges, open source, school projects; there is a lot you can show for your talent. But nothing will speak like experience. Of course it's the proverbial chicken and egg situation: "how do I get experience if I can't get the first job? .. Someone has to give me a chance!" Well I wouldn't say that I haven't experienced this either. There are basically two situations. I came close to actually getting a job but the job was for framework automation testing using C# and the .NET framework. I tried to complete a series of challenges but could not finish in the elapsed time. I have been putting my energy and education dollars into learning how to build high grade enterprise web applications and while I would have been glad to join any team for the experience - it just wasn't catching on with me. But there are companies out there who are willing to take a chance. Maybe things aren't moving as fast pace wise for them. Maybe they can actually take the time to on board a brand new developer (degree or not) to the team and have mid to senior level developers train them because they understand the value in bringing someone up in the company from scratch. This happens all the time. I had a couple of encounters so far and those are my best bet. Because I'm not done with school then when these opportunities arise I must be ready to present everything I know which ranges from my Github repositories, personal projects, and more recently the apps and scripts I'm working on here at work. Hopefully the next encounter I come across will be somewhat technology agnostic and they just care about seeing the ability to program, think logically, and enjoy learning. I say that because the last interview I had was a Java, Spring, and Hibernate job. I had recently built a web application at work in Ruby on Rails, I have scripts in Python and Perl, and I developed an E Commerce application using C# 5.0 .. but this company needed someone right here and right now to board on and they needed exclusively Java experience. So I mean all of this varies. So as for me it's basically like this: I am going to stay put at my job here and code when I am presented the opportunity to. Here at work we have scripts, web projects, and our main application is PHP and Java script. I am going to build my resume and add experience while working through school here. I'm not going to go chasing down every programming job I come across because most likely I'm not going to be ready for what it is they need. But, I really do hope again that I have chance of speaking to one of these companies that are in the mood to take a chance with a JUNIOR junior junior junior Dev such as myself and raise them up from the bottom. I will be there and pursuit these types of jobs. The job I am working now is pretty much a two year deal at least guaranteed. I am going to do what I can, finish my education, and constantly put myself online and share what I am learning. This is probably the case for many other people in my situation. I have discussed in a previous post the struggle for new developers in this ever changing landscape of technologies that you are just expected to know when hitting the field. I really hope schools are prepared for this. I don't know when the last time I heard the terms "backend" and "frontend" developer. There is a vast pool of information and skills that this digital age requires that we HAVE to be on top of constantly no matter what particular field of development or IT you're in.
"Hey, what do you do?"
"I'm a DBA/Java developer"
"Oh .. what is that you're working on?"
"A Node/Angular app."
...yeah.
**************The New Direction****************
There was a three month gap from my last blog post. That is because I again felt inconsistent with the technology set I was working with. I went from C# to Java and I really did not want to appear from no where with a post about Rails and Ember. I began investigating Rails after learning Grails for sometime so that I could see a bit more about where this framework got its roots and then discovered how productive I was, how much I was able to learn, and how much Rails had changed the game. I kept this to myself but really got interested in Ruby and still am. But where I live, Rails developers aren't around much. I think the Rails way is the right way and will love to learn more about the framework in the future but the Nashville enterprise is built on Java and Spring so I think it's at least in my interest to continue with that to. I think I should do what makes me happy and I've already talked about mutliple skill sets. I know that there could be a big oppurutnity as the years pass for me to come across more Junior Java positions .. it's just a highly valuable skill to have. So much of this world is built with Java so I don't plan on stopping. Over the past two months though I was able to bring my boss and idea about a web application and work with a team to help prototype deploy a Rails application to help the IT staff here manage server reports, trouble tickets, and announcements. That is definitely good for the resume! But what I'm going to do with my blog to keep things in order is I'm going to work through a set of curriculum, right now I am taking a very formal and educational delve in to Spring to have have Enterprise Java as a serious skillset in my toolbelt. I will start section by section such as Dependency Injection with Java Configuration and Aspect Oriented Programming .. start off with a few modules and create projects based off what I learn and then blog about them and post the code to Github. I will then progress along with Spring MVC, Spring Data, Spring Batch, etc. Each time I learn something I will be more committed to share it. In between that if I do something random I will of course share that too. For instance just the other day I built a customer dashboard app that uses a Rails JSON API and delivers a page via Action Dispatch and then Angular takes over to control the single page aspect of it all. A typical SPA - TODOMVC type deal but I like getting little apps like that up and going to help learn and work through examples.
Well take care and Happy Coding! .... Happy Living!
Derek P.
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 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.
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.
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
Subscribe to:
Posts (Atom)






