Thursday, June 12, 2014

60 days with C#

Two months have gone by. At this moment I’m not sure a “career” alone is what motivates me and keeps me going with learning to code. I think it’s … the code. I’m a geek. I love this. I love computers. I love motherboards, CPU’s, GPU’s, I’m an avid builder and hobbyist, and I love following tech sites. I love what’s inside. Development is just one more thing. However it’s more intimate. It’s at its deepest level. It was going beyond what I’m used to because it’s going inside and being able to give life to something. It’s wanting to know why. So I am happy where I stand at sixty days with C#.

So where am I?

Ok, well I can’t be the software development “judge” and deem what I have mastered and how much of a “rock star” coder I think I am at the fundamentals … but I would have to make the statement that I am pretty much there. I have been exposed to every fundamental element of the C# language. I will say again – fundamentals – of the C# 5.0 language. However my education … has only just begun. And I hope it to never end.

     
  • Access Modifiers, Namespaces, and Scope
  • Reference vs Value Types

  • Boxing and Unboxing – Stack vs Heap
  • Methods w/Polymorphic features – virtual/override
  • Extension Methods
  • Objects and Classes – Partial Classes – Abstract Classes -Inheritance
  • Interfaces
  • Structs and Enums
  • Decision making – conditionals
  • Exception handling
  • Operator overloading
  • Anonymous types
  • Asynchronous programming – async & await keywords
  • Generics
  • Collections
  • Generic Collections – .. List<T> .. Stack<T> .. Queue<T> .. HashSet<T> ..etc there are more of course.
  • Using iterators to loop through these collections and understanding the IEnumberable<T> generic interface and its GetEnumerator() implementation.
  • Delegates and their role with –
  • Events
  • Lambda Expressions
  • Language Integrated Query – LINQ

As stating in other posts, Pluralsight has been a huge help with amazing instructors like Scott Allen, Shawn Wildermuth, Jesse Liberty, Dan Wahlin, and so many others. Books from Adam Freeman and John Sharp as I listed in the last post. The most I really learned from a book was in John Sharps book Microsoft Virtual C# 2013 Step by Step. This book broke every component of the language down step by step and provided helpful coding examples with real world scenarios in developing .NET applications with C#. Again, I recommend it for any beginner developer just now trying to tackle the language or a more seasoned developer who may want to inspect an element of the language more closely.

So Where from here?

Well coding of course. I will always try to master these core fundamentals and put them into practice by choosing an area of the language to focus in. For me right now it is Web Applications with ASP.NET MVC, Web API, and Entity Framework. For others it may be Windows Store Apps, Windows Phone 8.1 apps using XAML, or even WPF and classic Windows Forms. That’s the beauty with this language, it is used EVERYWHERE. In fact you don’t even have to stick with just Windows. With the help of Xamarin you can develop applications across Windows, Android, and even iOS using just one language – C#. Oh and don’t forget video games and entertainment with Unity! There’s more than that, you really should go check out how many solutions there are for developing video games of all different sizes with C#.

So I will continue to code and stay fluent with the fundamentals of the language while exploring new areas of the .NET framework. Right now I am working my way through the Adam Freeman book I mentioned in the last post and am actually choosing ASP.NET MVC to develop my personal site and portfolio with, using Windows Azure as the hosting service; which I would recommend using. It’s affordable, scalable, and of course integrates nicely and directly with Microsoft tools like Visual Studio and WebMatrix. I will also be reading the legendary C# in Depth by StackOverflow.com legend, Jon Skeet. And while coding and reading I’ll always be watching the latest trends online and following blogs, watching videos, and reading as much as I can. After learning the fundamentals of this language I now want to study good software development techniques and practice writing effective and maintainable code. I also want to take advantages of tools and techniques that sharpen our abilities and expand the rigidity of our code, for instance using DI containers like Ninject and StructureMap where needed, as well as Test Driven Development with Unit and Integration testing.

So this is an achievement for me. Moving through the basics and now putting them into practice as much as possible while always learning and wanting to improve. There’s always a lot to be reading about so I’ll be staying busy. I will be creating some future posts about more in depth information pertaining to the internals of C# and the .NET framework. Showing code examples of some of these fundamentals and how they can be applied when coming from another language or framework. It would be good to compare and contrast some things I have observed. Before coming to .NET the only development experience I had had was an introductory course using the basics of HTML/CSS and about six months of Javascript. Just the concept of implicit vs explicit typing (which yes, now in C# you can implicitly declare variables and let the compiler decide what they are at runtime) and the concept of classes alone made me feel like I was looking at something totally new. Well off to enjoy the rest of my weekend. I’m feeling good about moving deeper into these technologies and will continue to share these thoughts and feelings with you (and myself) as the journey continues. I hope to have my site up and running as soon as possible so I can have something other than my blog to show. I’m still working on setting up dates for my first client project with the salon stylist so I can build a commercial website for them (using ASP.NET) and hopefully get familiar with Git very soon. I’m a little late on that.








So, plenty to hear and see from me soon!



And one more note as far as a good bit down the road, since I do love client technology and the strides that Javascript has made as the language of all and any, I do want to dive deep into developing with the MEAN stack, as well as integrating client side MVC technology such as Angular JS in with .NET applications. … But that’s down the road. One day at a time. Because I also have a Java class coming up in school I have to prepare for. I’m sure you will see quite a few posts on my journey through Javaland during that semester.


Hey I’m trying to get some more Twitter followers ..and heck even find some more cool people to follow, so hit me up! @dptech23 

Thursday, May 29, 2014

Update and more learning materials

Of course I can't begin to say how greatly impressed I am with Pluralsight and I am very happy to be a customer. Some do say that books don't help them learn. They actually do work for me and I think that they are great supplements to self-education. You hear a lot that even seasoned developers (and IT professionals - because I am one of those) should be reading a technical book every month. And there was some statistic floating around that 90% of developers read only one or less technical books per year. I can't give solid evidence to that statistic but I understand why it's important. It's not really that you have to learn comprehensively from a book or that a book a lone is going to teach you everything you need to know about a certain technology but, at least for me, books are a great way to get introduced to a technology. I just prefer a more intimate and professional experience. There are plenty of articles and free tutorials about certain technologies but of course I love spending money and supporting the developers who work very hard to provide this material. So with that, Pluralsight has been such a great way to see examples of principles and concepts put into action. Reading is great for me and there are even examples to follow along with in the books but to see a programmer go through the steps while talking about the technology - that's just effective. But I do also see Pluralsight as a supplement for my self education. You still have to do some heavy lifting by reading more in depth material on exactly how something works and just look at it on a page and then of course opening up Visual Studio (or your editor/IDE of choice) and start playing with it! I wish my impostor disorder wasn't so strong sometimes. I wish I would have developed more patience and discipline as I was growing up. Well maybe this journey is making up for it. Because the amount of patience and discipline I'm having to learn and exert is overwhelming. Things don't happen. Look at your phone right now. That didn't just happen! A lot of users may go look at a website ... you log onto Twitter every day.. and it could really look easy! It could look ... just essential! But when  a developer see's a new project and is impressed ... you already know what kind of hard work, discipline, and sacrifice went into creating what you're using. That's something worth working for. That's something worth contributing to. That's a real job and a real calling. The power to create and understand. Technology really is more philosophical than it is technical. So when I think that I don't have what it takes .. I'm reminding myself that my first blog post was April 12th .... it's May 26th. Someone tell me to shutup! I can't even use Git yet. I'm learning source control now. I'm digging into code. I'm frustrated trying to make sure every minute is utilized wisely. When I watch a Pluralsight video and am amazed at how the code flows so fluently....and then I hear them say "I've been in software development for 27 years" ... yeah I'm on my first half ass year(learned JavaScript and HTML/CSS in summer of 2013 and took a web development course/second real month. Plus I'm in College, something that others don't have at their disposal. So yes, the struggle/motivation is real. It's not really about what resources are at your disposal but how you utilize them. I don't have any huge projects right now because I'm spending hours making console applications learning the language internals of C# ... eagerly making my way through ASP.NET MVC and then to Client Side MVC... then later on I hope to have some great things being produced and maintained for my portfolio as well as other clients.

So yeah ... it's going to be pretty crazy looking back on this blog after a year. Because I'm confident that I will say "Yeah, there was nothing to worry about. This s!@# takes time, dude." Anyway I'm having a blast and love writing way too much ... this is because I talk too much.

So lets get on with the second part:

Education is good m'Kay? We have all these resources available to us and know which ones work best (as stated above) so I'd like to let you in on a series that you may find very helpful. This series has great reviews all over the web, including Amazon and I am finding very useful because of how comprehensive it is.

So I use Pluralsight and as for C# I have been reading a book by John Sharp called Visual C# 2013. While watching courses from the Amazing Jesse Liberty, Scott Allen, and Dan Wahlin - this book has broken everything down to it's core and has explained concepts one right after another and I have found that's how I learn best so I would recommend books from this author. I looked for the author of this book on Twitter but couldn't find him.

So a great series to check out is the Apress Professional - Adam Freeman.

This author does provide an extensive collection on books from the fundamentals of programming (HTML5, jQuery 2.0, JavaScript, C# 5.0) and then moves to frameworks (ASP.NET MVC 5.0, MVC Client, Angular JS)

I own both Pro ASP.NET MVC 5 and Pro Angular JS.





 He starts with introducing the technology and putting it into context with its uses and history and then jumps straight into building an application. And of course if you're new to the technology, you have no idea what's going on. But you go through and see how this application is built and then he goes into exquisite detail about how each component works and why you did what you did. After learning about how the application works by using the fundamentals of the language or framework, you then go into learning in detail about each concept he just explained. (Routes, Controllers, Views, Directives, etc.,)

I'm not sure if what he does this in every book but in these two you actually build the same application. And of course that's amazing because you get to witness and take part in building the same application on two different languages/platforms. And at least to me that's really engaging and effective. Because as a software infant I don't know where my loyalties will lie. I know that in this economy you need to know as much as possible and be willing to learn and expand your knowledge constantly. But everyone has a place they belong. Will mine be backend or frontend? Client side like Ember, Angular, Knockout? Or will it be C# ASP.NET and Ruby on Rails? I don't know where I'll end up. But I know I won't regret getting there.

Because I'm going to take a piece out of each book and experience many things along the way. Development is a craft. Things were kicking in until I really started thinking about it this way. Like a blacksmith, woodworker, mechanic, musician, this world is a devotion and a craft. It's almost artistic. It's not something you can read a book on and then get an exam and go clock in. You have to live and practice, honing your skill, almost like an art, to make yourself better everyday so that you're developing the highest quality product possible for the world. People are using what you do. They are relying on what you do. You couldn't do anything but breathe and drink water if it wasn't for a computer program. This is our world.

And I plan to master it.


 class SeeyaLater!
    {
        static void Main(string[] args)
        {
            string farewell = "Happy coding everyone!";
            string Farewell = "Until next time!";

            Console.WriteLine("{0} {1}", farewell, Farewell);
        }
    }
}

Sunday, May 11, 2014

Well, it's been a month.

EDIT:
I may not be with WordPress. I will keep you updated. I am looking at .NET options after I had to go back on a few things within my research. Please reach out to  me if you happen to read this within the next few days.

*DotNetNuke

*Orchard

*Umbraco (probably not) ... ok scratch that


Alright so I’ve gotta get real. I’m tired of sucking at blogging. I have been using somewhat more of a diary and not really something that contributes value. So we’ve learned that I probably should keep some kind of alternate journal to organize thoughts and then actually think about what I want to publish online. So yes, I am currently watching a Pluralsight course that is available free called Get Involved! It was put together by Rob Conery and Scott Hanselman and it is a really awesome way to see how to get your voice out there and socialize amongst the community with blogging and Twitter, GitHub, and of course Stack Overflow. It’s got great insight from people who have been blogging for a long time. Jeff Atwood gives some insight into what it takes to have a successful blog. I would definitely advise to listen to whatever that man has to say. So yes … it’s been a month since I said I “officially” started learning C#. I’m trying to focus on how much time I’m spending and what I’m doing when I spend time on my computer to really maximize results and be effective. Because time isn’t something that I have an abundance of. I have school and work and it has been distracting because all I can think about is coding. I have to remember what other things I like to do as well. So I have watched several courses and I am reading a wonderful book by John Sharp from Microsoft Press called Step by Step – Microsoft Visual C# 2013 and it has really helped a lot of those concepts sink in. C# is an extensive language and is the heart of the .NET framework so there is a lot to learn because it is utilized everywhere. Data types, Object Oriented principles, and … Razor! Yes, I’ll get to that. I know that at heart I’m a web developer. I really like learning C# and I really do want to be very good at using it for a number of projects in the future. But there is nothing like seeing a pair of anglebrackets and a DIV in action! ß Kidding. But yes, I love learning more in depth OOP principles and C# seems like such a useful and powerful language … but I know honing my programming skills is going to be utilized on the web. So that brings me back to Razor. Yes the wonderful view engine that I have been mesmerized with. The whole thing … I know that ASP.NET is a perfect place to start in my career. I wonder about how everything all works together and right now I am having a blast. I don’t know about what the future holds but I’m still on the .NET train for today. I love having AHA! moments. Every line of code I write and everything I watch and read helps all of these things come together more and I really like to see that happening. I learned the basics of MVC and I am really understanding the MVC structure and how these things work and my face lit up in awe to see a URL be mapped to the Actionmethod of a controller. Seeing how to create a consistent layout and maintain its usability throughout an entire application, and how to generate new content throughout the application using Razor markup – C# code directly in use with HTML. Keeping concerns and responsibilities separate and emphasizing convention over configuration is definitely how I want to do things. Well yes I am learning … but not enough doing. I have a lot of open projects that I am doing but it’s time to implement those. This is the last kind of diary post I will ever do and I will probably be the only one to come back to this again but I am thinking about a CMS to go with for blogging .. at least for now. I am going to post relevant information about things I have learned and show examples of that information. I will continue to update of course on live projects. I got the opportunity to work on my first professional site as an amateur web developer. This opportunity came from a very good friend of mine who agreed to let me create a site for them, advertising their hair styling business. This is exactly the real world opportunity that I need for a resume and I have other people that I’m talking with who will let me do the same thing. Very excited for this. But yes, going to start out on wordpress or DNN and just create and create as much as I can. Still have to work, still have to go to school, still have a young family, still have stress, and still have life. This is just one exciting part of it all.


Farewell Blogger.


EDIT: Again...

I'm still using Blogger. I do have a Wordpress set up and am building my own system with ASP.NET Web Pages ... but this is just going to have to work for now. I don't really think that I'll get rid of Blogger. I mean, I like Google. And there is a lot you can do with it. Oh well. I will do random stuff like this like mentioned above but I am doing things that will be strictly technical. They will be meant to teach. Right now I'm writing a post on how C# implements Interfaces and Abstract Classes ... coming from JavaScript 101 ... this concept has been mind boggling. I have learned a lot and it's time to share things I know while I'm coding. 






string farewell = "Happy Coding";













It's been a long time.

All I can say is wow. I’m not good at blogging because when things are good you find yourself wanting to speak your mind and share these things. But what about when things are not so good? What about when you’re going through something outside of this digital life and you shut yourself out? I really think that if I would have started writing my thoughts sooner, then I’d be a lot better off. It helps me more than anything. And I need it because I’m concerned with how fast thoughts in my head move. Sometimes it’s like a whirlwind and it’s hard to keep up. Well this is the end of the line for that. I know that life happens and we’re all busy but I need this blog, I think. Because it’s going to be in the future that I look back and see how I thought and what I said. And that’s how I’m going to know how much I’ve learned. So to anyone who is reading this, ignore the lapse in time. One thing I can tell you is from the last blog post to this one ….. I have learned so much. Now in the next post…we can get on with the show. J

Thursday, April 24, 2014

Resources for learning.

I am having a super busy week. I have a ton of things that I'm working on but have to work everyday and try to do homework so they have a long way to go. But I'm still having fun. Wanted to whip up this post really quick to let you all know that I created a small web page using Microsoft Expression Web 4 which I then opened and deployed to Windows Azure using Webmatrix 3. I could have gone through all of these things in this blog post, but you know, any chance I get to use </>'s I'd much rather do that. So yes, I created a page that has all of my favorite sites, and ones that I have just been following in general as of late, so that you can know some good places to read up on web technologies, .NET, general software development, legal news, reviews and unboxings, and a plethora of other great information from really great people. Learning is everything and utilizing the greatest tool we have - the internet - is so very important. Well have a great day I'm working on some pages and posts and trying to come up with something more interesting but gotta finish out the work week. Visit the site and you guys have a good one!


Check it out!

Monday, April 21, 2014

I still suck at blogging. I suck at Twitter .... and I still suck at programming. But still love my life :) Oh and my first'ish web page.


What a week. I've learned a lot. So lets at least get to some of it:

Coming from computer hardware and software maintenance, servers and networking, information security and administration, web development and software engineering has introduced a completely new world of technologies to immerse yourself in. It’s endless and presents tons of new concepts to learn and master. Being in the field of technology, period, requires an individual to constantly learn and be open to change. Nothing stays the same, there is everything to learn, and everything is a new idea. So of course that’s why it takes a while to get the hang of a new technology. It takes a while to learn how something works and then do it yourself. Which is really the majority of the motivation for myself to document this journey. That and of course I love making web pages and software. Even though this may be easier if I combine a VLOG with my pages. Because I can talk pretty well. Thankfully, I can write well too (IMO) So perhaps in the future. Well I hope everyone had a great Easter. Seeing my family truly makes me happy. I only live an hour away but still I feel like I see them only sparingly. Being in school and working is a 20 hour a day job (I include sleeping) so when I get a few hours I’ll see my friends and family. So anyway I have a new web page up. You can see that here. It is called My Web Tech and it is a .NET web page built with WebMatrix 3 and is hosted on the Windows Azure platform. WebMatrix is a very interesting tool that can be useful for beginners as well as seasoned developers. Even though I don’t see too many seasoned developers really being immersed with WebMatrix since the projects they would most likely be working on would already be implemented through Visual Studio or something with higher scale capability. But it is a Microsoft tool that does integrate with the .NET framework. The web page has jQuery, Bootstrap, and CSHTML components. It is ASP.NET. It is a fast and friendly way to get a page up quickly. It has the ability to implement hundreds of blogs and CMS like Wordpress and Umbraco. And you can have a quick site up and running within minutes or you can create an empty project and build something from scratch with PHP, ASP.NET, NODE.JS,SQL CE and more. It’s pretty awesome and free and you get a free trial with Microsoft Azure (I’m pretty sure that’s available) and you get up to 10 sites for free. Now the site I made has a xxx.azurewebsites.net extension. Like I said I just used it to whip up and deploy a site that can be used in conjunction with this blog post to keep track of more specific things I've learned. So this past week has been inspiring. I’m on a good track I think. I will every so often turn around and say “Why do I like this” or “Why am I doing this again?” "Why the rush to do this so quickly and obsessively?" and “I’m going to learn more about this in school later on … I’m sure I’ll learn this stuff eventually.”, “This is a hobby for the most part”. This line of thinking is really dangerous. I am driven to understand things that I didn't before and know how to take advantage of a chance to be able to solve a problem or contribute to a solution for someone. I want to work in this field. And if I'm serious about it then I will make it one of the most important things I do. It is fun. There is so much I don’t know. I want to go beyond what I thought I was capable of. I love internet technology. I love software. We are dependent. I was born the year that Hyper Text Markup Language was invented … and my head starts spinning to see where we've come in twenty three years. So this is the part of society I want to be involved with. To see how these things change our lives and improve our lives. Because I also care to understand how people work along with the devices they use and rely on everyday. I mean that makes sense right? I can't think of anything, in our age, more important than understanding both people and technology.  I want to spend the rest of my life behind a computer screen hopefully making a difference. It started as picking a major in college but this is what it has grown into. My comfort, my hobby, my career, my meaning. It feels good to have purpose. This is what I do. So that’s the reason for my education, my blog, my code, and hopefully my future employment as a web developer. So yes please go check out http://mywebtech.azurewebsites.net as there will be more sites and pages to come. Hopefully by next year I have a functioning portfolio. I know that I have projects coming my way not only from on my own but also in school. It’s going to be crazy being this immersed in C# and JavaScript and being used to doing things a certain way with a certain platform and framework for so long and then have to learn Java and PHP. I mean I somewhat have some control over that but I have to have another programming language in school for a sixteen week course. With what they’re offering I might as well learn some Java. I may not agree with it being used for several different reasons but the fact is that it’s a popular language and a popular tool in the development toolkit for many projects and companies. So I should learn how to read it at least. Because in 2014, the idea that I might encounter some Java in the wild … is quite high. Same with PHP. So yes….it’s Monday. Going back to work to help customers with their technical problems. Still learning and building and … I’m not sure how many people are going to read this huge book that I’ve posted, as this blog is a lot for me as well, but if you did thanks. I suck at blogging. I suck at programming. I suck at many things. But that’s where the drive to better yourself comes from so I’m fine with that. So here’s to a million blog posts and a million lines of code! 

Monday, April 14, 2014

Day 3 (ish) of my new commitment.





I feel like I have learned a lot in the past few days. I really must remember that it has only been a  few days before I reaffirmed to myself that I was serious about a career in development. I mean … I love working with technology. I love fixing and improving technology of all kinds. Right now I am currently a technician for AT&T and enjoy fixing cell phones and computers for our customers. And for the past few years I have been working my way towards a career in networking/systems administration. And while I’d love that … I mean like I said I love it all. I want to create things. I want to contribute something to a system that people use and be responsible for something that helps other. Programming can do that. It doesn’t matter if I’m working for a large company maintaining their ASP.NET or JAVA intranet tools. I mean it could be that …. Or working for a start up on a new app for mobile devices. Or just working with multiple clients to build web sites. Creation and innovation is something I know I want to be a part of. I know that its something that will continue to make me happy. Yes, money is a factor. I want the economic security that I need to take care of my family and development really does pay well. I’d be lying if I said I never thought about earning a living. But honestly it hasn’t been at the top of mind. Learning has. Learning and doing. I feel like today was a good weekend. I learned a lot. Coming from JavaScript, this been a new learning experience. C# is different. I mean they are very similar in many ways – like the syntax! The C# syntax is no problem coming from JavaScript. But really the OOP concepts are … near the same foundationally yes … but there are big differences in the way C# works with classes and JavaScript does not. I had to get the hang of creating classes and am currently studying the OOP concepts of inheritance, encapsulation, polymorphism, methods, partials … the basics. So yeah. Similarities and differences from JavaScript. There are things I really love about JavaScript and will continue to improve my JS skills throughout my career. I can’t wait to learn more about new JS frameworks like Ember, Knockout, Underscore etc., (I think those are frameworks ?) But anyway back to C#. My goal in the long run is the .NET platform. Well….short term … but long term at the same time. Because yes of course I plan to learn many more frameworks and languages … the world doesn’t revolve around Microsoft. (I think) But for now … .NET is where I’d like to stay and learn more. But after talking with a great role model and PIuralsight instructor – K. Scott Allen (odetocode.com) I have reminded myself that the foundations are important. Have to have strong JS skills before I can move on to advanced frameworks and I need to get the basics of C# and other .NET tools before I can throw out huge MVC applications. The first job I shoot for, I really wouldn’t be surprised, if it was just HTML/CSS and a little JS. (I’ll be ecstatic over anything web related!)  But yes I’m rambling. Blogging really is a good way to organize your thoughts! And as you can tell I have many of them. So yes. ... Heading on throughout the week I’m going to finish the Scott Allen C# 5.0 fundamentals course and finish reading my C# 5.0 pocket reference (while reading through the  much larger version C# 5.0 in a nutshell http://goo.gl/ozaqov). And I’m also watching a Microsoft Virtual Academy series on C# programming fundamentals which I have found to be a good recap on these subjects. It’s good to see as many people as possible talking on screen about coding and actually coding themselves! So yeah … Aside from basic data types, variables, objects, and classes I’ll tell you in the next blog post what I learned about later in the week. I was happy. I made a small console application today that contained data about all of the Game of Thrones books by George R.R. Martin (which I have yet to read) and it interacted with users by using the speech synthesis reference in the .NET library to implement methods that would read aloud text specific to which book the user wanted to know more about. You would make a selection and the voice would tell you a bit of info or prompt you to make another selection and there would actually be publication information displayed on the screen regarding the book you selected. So yeah just tinkering around. Well I have to get off of here and go to work. People need their stuff fixed!

Happy coding


Derek