DEV Community

Lyon
Lyon

Posted on

Transitioning from traditional PC apps to Web Development

I have 6 years of professional experience with C#/.NET type work. (I've learned more than just that, but for the purposes of this discussion I am focusing on that)

After a brief stint at teaching, I am looking for work as a Software Developer again. The local job market has dried up, and it has become obvious that I must do one of two things: move, or work remotely.

Moving somewhere else is not an option for me, so I am trying to venture into remote work. Things I've learned so far: it is very difficult, if not impossible to find work doing what I have professional experience in. I need to embrace web development.

So I am digging in. It is a little humbling to have to try to find entry level positions when I have the years of experience I do, and entry-level remote positions are pretty rare themselves.

I have also learned I need to build a GitHub portfolio. So far, my career has been working on others software, and I am not 100% sure on what I should even do for a project portfolio. I assume tutorials are not enough, as it isn't my own work.

I know HTML/CSS and some JavaScript, but knowing this is not enough. I need x years of experience in the various popular technologies that are out there (React, Ruby-On-Rails, Node.js seem to pop up alot) for my resume to even reach HR before it is filtered by Applicant Tracking Software.

Anyway, this is a long rant. If you read this far, thanks! I would enjoy reading your experiences making a big jump in your career as well as any advice you have.

Latest comments (20)

Collapse
 
lyon profile image
Lyon

To those who shared their time and knowledge with me, thank you!! With your support, I just landed an amazing job working with web apps. Thank you so very, very, much!! I will pay it forward when given the chance.

Collapse
 
lyon profile image
Lyon

Thank you everyone for your advice. I appreciate you all taking the time to help me out. I've heard so much about burnout, I've never heard of people giving up because they couldn't find work, so I have been a bit down.

Collapse
 
jfrankcarr profile image
Frank Carr

The first thing to understand is that many, if not most, online job ads are a long wish list for the perfect, "unicorn", developer. So, you'll see ads that want a developer that has 5+ years experience in Java, C#, PHP, IIS, REST, HTTP, XML, XSD, JSON, WPF, UWP, Node.js, SQL Server, Oracle, MySQL, Entity Framework, Angular, React, Web API etc. etc..... A lot of companies don't really know what they want so they throw out an alphabet soup hoping to find somebody good by intimidating away most people. So, don't hesitate to throw your name into the mix even if it seems rigged against you, if you don't bet, you can't win.

Also, don't necessarily give up entirely on Windows desktop application development. While it is true that all the "cool kids" are doing web development, there are still plenty of stodgy corporate IT desktop apps being maintained and there's even some new development. One of the best situations to get into is one where a company is wanting to move to web based apps but has a huge library of legacy desktop apps. They need people who can work comfortably in both worlds. Since you'll be on the same learning curve, this could work out for you, particularly if you're slightly ahead of their curve.

Collapse
 
lyon profile image
Lyon

Thank you very much for taking the time to respond. I appreciate that! with regard to the laundry list of qualifications, I have run into a bit of a roadblock in that regard. There are literally *required fields where if you do not have x amount of experience in that technology, you cannot apply. I got my first job by calling up a company here locally that was looking for a senior developer. I said I was not senior, but would they consider an internship or entry level, then off I went. It seems that is becoming rarer to actually be able to communicate with a human.

Collapse
 
jasonpalmer1971 profile image
.

Webforms was designed to make the transition easy and still used by a lot of people, often for web based in house apps.

Talk with recruiters, study and certification help but always out of date due to blistering speed microsoft release new versions.

Talk with recruiters, we coders, not recruiters ?

Collapse
 
dev_theresa profile image
Theresa

Ohhh I recognize this thought process, as I was recently living it too.

Step 1: Take a deep breath and don't freak out. :) The web dev world is totally overwhelming right now. SO many new languages and methodologies, it's easy to feel like you know nothing even with years of experience. You are not alone. This is gonna be OK.

Step 2: Read this pep talk from Scott Hanselman - I may or may not have been the inspiration for it.

Step 3: Realize job listings are asking for their ideal, most perfect unicorn candidate. And that they know most of the time they're not going to find them. If you can demonstrate that you're capable, have a solid foundation and are willing to learn new things, most places will want to hire you regardless of years in the field! Being a programmer means always learning new things. Always.

Step 3: Make an effort! You obviously can't learn everything and get the "years of experience" jobs are asking for in a short period of time. The good news is you don't need to! Just make an effort to learn. Just get started. You say you can't just do a tutorial and also you need a GitHub portfolio... When I was in your (almost exact) shoes, I did both at the same time. I found a tutorial to teach me the new stuff I needed to know. I started a new project and followed the tutorial... but I modified the tutorial to put it in a context I already understood. Instead of building the exact app in the tutorial, I rebuilt an app I had already built using the new language and methods. It's a great way to teach yourself new concepts! Then I set up my Github account and bam - instant portfolio.

I know, I know, you're thinking this isn't enough. It will never work. Except it will, and I know because I literally just did it. After nearly 15 years working with outdated .NET programming and never using git in any form, I landed a job asking for all kinds of skills I don't even have. I was able to demonstrate that I have a solid foundation and my employer was super impressed with my initiative in creating the practice app and the Github portfolio (even though they were far from complete or perfect). You can do this :)

Collapse
 
lyon profile image
Lyon

Would you be okay with being my spirit animal? I cannot convey how encouraging this post was. I live in a place with extremely limited opportunities in programming, and just today I have started filling out paperwork to be an Uber/Lyft driver because I have just about given up. Giving up would be heartbreaking. I worked so hard to learn all I have. I am not going to give up. Thank you very much. I really, really appreciate it.

Collapse
 
dev_theresa profile image
Theresa

I'm happy to pass along the pep talk, as I got a killer one when I was in your shoes too. Good luck, you've got this! :)

Collapse
 
isaacdlyman profile image
Isaac Lyman

Out here in Utah, a lot of companies are hiring .NET devs to write web server code in ASP.NET MVC. If I were you I'd play to your strengths in .NET by picking up MVC and writing a straightforward webpage with some routing, XHR endpoints and a minimal front end. That should make your GitHub profile more than good enough.

JavaScript shouldn't be too difficult to learn. In fact, ES6 is more like C# than any other language I've ever written (including Java)--not in terms of paradigm, but in code style and programmer-friendliness. HTML and CSS are strange beasts, but they're 90% vocabulary and you can pick up most of what you need on the go. All the same, there's enough demand for good .NET developers (and a good enough supply of HTML+CSS devs) that you shouldn't need to be a front-end pro.

Just my two cents.

Collapse
 
lyon profile image
Lyon

The employers in Utah, they are hiring remote workers? Thank you for the information. I very much appreciate it.

Collapse
 
isaacdlyman profile image
Isaac Lyman

Some of them are, not all. If you need to meet some Utah-based recruiters, send me a message on Twitter or LinkedIn and I'll introduce you.

Thread Thread
 
lyon profile image
Lyon

Thank you so much! I will do that.

Collapse
 
kspeakman profile image
Kasey Speakman • Edited

You didn't mention the techs you used (e.g. WinForms, WPF, UWP). HTML/CSS is nothing really like WinForms dev. It has some similarity to the other two but I honestly find web more flexible to layout and style.

Probably the first thing is to forget the constraints you are used to facing. For instance WPF only allows you to apply 1 style. WinForms, styles are hierarchies of data objects that you have to set properties on to apply styles. The web doesn't work in either of these ways. (You can set properties in javascript to apply a limited set of styles, but it is not as common.)

Desktop apps are commonly a mix between front-end and back-end concerns. If you haven't already been developing this way, you have to start separating those two concerns mentally. Because browser-based apps are basically untrusted code (anyone can hit F12 and modify the code, or send their own requests off), only the server-side is allowed to access files, query the database, etc. The desktop equivalent would be to develop separate libraries responsible for business logic, infrastructure, etc. But basically those libraries move to the server-side, and what remains on the front are UI manipulations and collecting user data necessary to interact with the back-end.

Browser-based front-ends are all the rage right now. But there is still a very popular class of server-side tech that is a mixture of front-end and back-end. The general formula is rendering templated HTML/CSS on the server side, with controllers to execute business workflows, access databases, etc. Examples: Ruby/Rails, ASP.NET MVC/Razor, Python/Django, PHP/Laravel.

Going the browser-based route, you might want to specialize in either front-end or back-end at first. Back-end means setting up things like web APIs, executing business use case workflows, integrating with database, email, etc., serializing and deserializing responses and requests, and so on. Nothing much to do with HTML/CSS. Javascript (via Node.js), Ruby, C#, Go, etc. (pretty much anything) could be used for back-end services. Just search for web api with your chosen language. They each have their own hosting/routing libraries to pickup.

If you want to specialize and UI is your thing, feel free to dive into HTML/CSS. It might be a good idea to use a CSS framework to get you going. Examples: the ubiquitous Bootstrap or my favorite Semantic UI. These come with pre-built CSS classes which you can apply to HTML to make many common controls. They have good documentation with a lot of examples. In the desktop world, these would be similar (but not quite as heavy as) using Telerik or DevExpress control toolkits. Then as you learn more about CSS, you can venture into customizing the pre-built styles. And if you find you really like it you can venture into scratch-built layouts. I still use CSS frameworks for business apps... it's just a lot quicker to get up and going.

The HTML and CSS are just the presentation part of the UI. The only game in town for programmatically controlling these is JavaScript (or something that compiles to it). There are utterly ridiculous numbers of JS-based technologies. For me, the right one currently is Elm. But popular component-based UI frameworks are Vue, React, Angular. They each have their own learning track and opinionated abstractions to commit to memory. (Elm does not make you learn very many non-portable things.) My advice is pick one and learn it. No matter what you pick, it will invariably get voted out of popularity in a year, so don't dwell on longevity too much. Whichever you pick, use a starter app like Create ??? App. Where the ??? is Elm, Vue, React, Angular, etc. That will get you jump-started with a working, deployable app. And you can dive deeper as needed from there.

Collapse
 
lyon profile image
Lyon

tons of great information here. thank you very much for it. the idea in my head was the employer would choose the tech, I would get an entry level position, and then learn. I fear I am wrong.

Collapse
 
kspeakman profile image
Kasey Speakman

I believe that experience is worth a lot more than just the frameworks you used to get it. Sure, your knowledge might be mostly entwined with WebForms or WPF or something. But you probably still had to do the core bits common to every developer. You wrote decision logic and you integrated with external systems. (External meaning: database, file, email, web requests, etc.) IMO, UI frameworks are external systems too. :)

It feels like a tremendous loss of experience to move to a different set of tools, but the core experience that makes a developer is still underneath all that.

Collapse
 
rhymes profile image
rhymes

Didn't know about Semantic UI, thanks :D

Collapse
 
kspeakman profile image
Kasey Speakman

Exceptionally good quality and variety of controls there. Even the CSS-only distribution, which is what I use.

Thread Thread
 
rhymes profile image
rhymes

How are they doing in the department of "table with server side pagination" ?

It's like the great classic for admin applications :D

Thread Thread
 
kspeakman profile image
Kasey Speakman • Edited

Pretty good on that front, as far as the UI elements.

semantic-ui.com/collections/table....

Edit: If you're looking for databinding though (something the Telerik / DevExpress controls do), you won't find it. That's left up to the language or framework you are using. I much prefer to handle this anyway rather than spending a lot of time trying to figure out the right data binding expressions to accomplish exactly what I want to do. It is pretty straightforward in Elm, for instance.

-- in Update
    SearchSubmitted ->
        { model | results = Loading }
            ! [ Api.search model.apiConfig
                    { search = model.search
                    , page = model.page
                    , pageSize = model.pageSize
                    }
              ]

    SearchReturned (Err err) ->
        { model | results = LoadFailed err } ! []

    SearchReturned (Ok ok) ->
        { model | results = Loaded ok } ! []


-- in view

view model =
    -- semantic celled table
    table [ class "ui celled table" ]
        [ thead [] [ ... ] -- header stuff
        , tbody []
            ( case model.result of
                  Loading ->
                      -- display a spinner or loading message

                  LoadFailed err ->
                      -- display an error message, could be elsewhere

                  Loaded data ->
                      -- toRow: fn to convert data to table row
                      List.map toRow data
            )
        , tfoot [] [ ... ] -- pager stuff
        ]
Thread Thread
 
rhymes profile image
rhymes

Thanks for the explanation. I'm using Bulma through buefy right now in a Vue app but I'm not 100% satisfied. Semantic UI's approach is interesting.