Career advice, interview tips, and more resources for job seekers. Hired is a career marketplace for the world's knowledge workers. Starting with in-demand tech and sales roles, we’re bringing together job seekers with the companies who want to hire them.
Top technical talent can come from anywhere—from developers who never finished high school to those with multiple advanced degrees. For non-engineers hoping to make a career switch to software development, coding bootcamps are becoming increasingly popular. These bootcamps come with a pretty steep price tag (an average of $11,900 per student) but can kick start your technical education and help you find a job you’ll love.
And it’s no surprise that bootcamps have grown in popularity, with the number of students growing 9x since 2013. Software engineers have a global average salary of $135k and 24% employment growth expected by 2026 (compared to 7% for all occupations).
But perhaps the biggest consideration for those participating (or considering participating) in bootcamps is their job prospects after graduating—and whether the cost of the bootcamp justifies the price tag.
There are many lingering misconceptions about coding bootcamps and their participants so to dig deeper, we asked real software engineers and bootcamp participants to weigh in for our State of Software Engineers report.
Software engineers weigh in
Though many recruitment teams at risk-averse companies still may be hesitant to hire bootcamp participants over traditional CS graduates, the developer community has a more accepting mentality. According to our data, 57% of software engineers claim they would hire a bootcamp grad for an open role. As for the remaining software engineers, only 7% indicated that they would not hire a bootcamp grad, leaving 36% undecided, which bodes well for bootcamp grads with strong interviewing skills who can prove their value to a potential developer team.
Unsurprisingly, the biggest concern about bootcamp participants for software engineers is lack of experience. To make up for this, candidates should consider pursuing projects outside of their bootcamp programs, building something on their own to showcase their skills as well as dedication to the career. In addition, finding and reaching out to developer teams who are willing to train up bootcamp grads may help in the search, rather than trying to pitch yourself to an unreceptive hiring manager.
What bootcamp grads say
Regardless of the broader developer community’s view of bootcamp grads, it’s also important to hear from real-life bootcamp participants who have gone through the job search process. According to our data, about three quarters of bootcamp participants report that it helped them prepare to get a software engineering job. The remaining quarter of grads feel that their program left something to be desired—so if you’re considering a bootcamp, you’ll want to find and talk to former participants for the inside scoop on the specific programs you’re looking at.
Before committing to a program, do your research into the curriculum and reputation, as well as job placement rates and average starting salaries for program grads. Typically, the better the bootcamp’s reputation, the higher your chances will be of getting the job you want, as more respected bootcamps will often have stronger connections to potential employers. That said, a motivated candidate might not need the bootcamp’s reputation to find their dream job, so it’s a matter of balancing your own dedication (and time you have to dedicate to a career switch), budget, and quality of the program.
At the end of the day, companies and the developer community have varying perceptions of coding bootcamps and attitudes towards hiring out of them—but the right bootcamp can be life changing for someone looking to break into software engineering and land a job they’ll love. For more insights from developers of all skill levels, geographies, and specialties, check out Hired’s State of Software Engineers report here.
Truth be told, many developers will tell you they prefer to work in an environment without meetings, colleagues, or even meals (see: Soylent) to distract them. But pair programming, an agile software development technique, might be an exception—or at least a worthwhile technique for facilitating better code outcomes.
For the uninitiated, pair programming involves two developers—often one more junior and the other more experienced—working together at a single workstation. Formally, the “driver” is the one writing the code, while the “navigator” reviews the code as it’s written. When the driver is a junior engineer, pair programming can be beneficial because errors are caught more quickly, not to mention it can help to build their confidence by offering real-time feedback on their work. When it’s the other way around, and the junior developer takes a step back to be navigator, they can learn more quickly by observing how their colleague thinks about the problems at hand and translates them into code.
Opinions about pair programming are all over the map, as some organizations swear by it while others swear it off. And individual developers have their fair share of thoughts about the technique as well. At Hired, in addition to thousands of data points about the hiring process for technical talent, our unique access to developers around the world allows us to collect deep insights about the state of software engineering, and the thoughts and opinions of the people who do it every day. We surveyed more than 700 developers for our 2019 State of Software Engineers to offer some interesting insights into when pair programming works—and when developers think it falls short.
When it works
Pair programming can be an incredibly useful tool for junior developers to learn quickly, so it’s no surprise that a significant number of developers prefer companies that offer it. According to our data, 48% of engineers would be more interested in working for a company which offers pair programming. And it’s not necessarily just junior developers who benefit; about half of respondents said they think it’s more efficient because it allows teams to catch bugs along the way.
Additionally, there are some “softer” benefits to pair programming—that is, not necessarily having to do with the code ultimately produced. For example, pair programming can facilitate relationship-building and moral support between team members, enable colleagues to share best practices, and make it harder for developers to procrastinate or get distracted while coding.
When it’s less than ideal
Pair programming doesn’t work for everyone, though. Our data found that approximately 4 in 10 developers think that while pair programming is good for junior engineers, it doesn’t benefit people with more experience. Furthermore, 1 in 5 believe that pair programming can leave one person doing all the work, and 14% of respondents believe it enables sub-par developers to go unnoticed as they lean on their partner and never develop the skills to successfully “drive” on their own.
The right balance
As with most things in the workplace, finding the most effective techniques for individuals, teams, and companies is a matter of testing things out to see what works—and constantly providing feedback as teams grow and evolve. Pair programming can be an incredible learning tool for junior developers, so if you’re still building your skills it may make sense to look for companies which offer this as an opportunity. If you’re more advanced, on the other hand, pair programming may not benefit you directly, but there’s a good chance it’ll be valuable to your team’s productivity and effectiveness, so it’s worth at least being open to giving it a shot.
As any software engineer will tell you, there are a plethora of coding languages out there and varying attitudes toward each at both the company and individual level. To dive a level deeper, Hired’s 2019 State of Software Engineers report examines not only the coding languages that set candidates apart from their peers, but also the preferences of developers from across the globe—and reveals some interesting and sometimes contradictory data about the languages that underlie so much of the technology that exists today.
Company wants versus needs
As it turns out, the programming languages that make candidates stand out to a company aren’t necessarily the ones they end up using after being hired.
As with spoken languages, geography matters
While Go tops the list across geographies, the hottest coding language differs depending on which job market you look at. Engineers who know TypeScript, for example, are the most desirable candidates in San Francisco, London, and Toronto, whereas Ruby takes the number one spot in New York and Parisian companies appear to love Go programmers.
How the engineers feel
Employer demands aside, developers themselves have their own opinions of the different coding languages, often due to how “fun” they are to use and how many resources there are for learning and development related to a particular language.
While knowing which languages will set you apart from the rest can help you to make your profile more attractive to prospective employers, it’s just one piece of the engineering talent puzzle. In addition to more granularity about coding languages and their competitiveness, Hired’s 2019 State of Software Engineers Report dives into working styles, the interview process, and salaries—all of which can give you a better overview of the market, where it’s going, and how to best tailor your experiences and skills as you develop your software engineering career.
There’s no doubt about it: Technology is evolving at an ever-increasing rate, making it that much more important for technical talent to stay on top of new trends and skills that are in demand today — as well as understanding how tech needs will evolve. At Hired, we have unprecedented visibility into tech hiring, from the exact coding languages companies are looking for to engineers’ sentiments towards working styles such as pair programming.
Using this proprietary data, we’ve just released our 2019 State of Software Engineers report, the first of its kind to include in-depth analysis of trends in the market for software engineering roles. Perhaps unsurprisingly, blockchain and security engineering skills are in high demand this year, a trend which we’ll dig into in further detail in this post.
Exciting prospects for blockchain engineers
Blockchain and crypto were huge buzzwords in recent years, but not without reason. Despite being in the very early days of crypto adoption, trading volumes are expected to grow by over 50% in 2019. Further, as of mid-February of this year, there were more than 2,500 known cryptocurrencies—over 50% more than there were less than a year ago.
Given that blockchains underly cryptocurrencies, the explosion of these alternate currencies suggests that engineers with blockchain skills must be in demand—but the trend goes far beyond crypto. Companies of all types are increasingly considering the implications and opportunities associated with using blockchain technology in their operations, from tracking products along a supply chain to IP protection to distributed data storage.
As blockchain technology has become more interesting to companies of all shapes and sizes, the need for talent has grown exponentially. In fact, the global demand for blockchain engineers grew 517% year over year between 2017 and 2018—and we expect this growth to continue as businesses continue finding novel ways to leverage this technology.
Security: The (old) new kid on the block
From Equifax to Wannacry, 2017 was a tough year for data breaches—so it’s not all that surprising that companies are beefing up their security teams. According to our proprietary data, demand for security engineers has increased by 132% over the past 12 months, falling second only to blockchain engineers in terms of demand growth.
The need for security is the result of a perfect storm of technological advances. As increasingly more consumer data is collected and stored by digital companies, data storage and security techniques have had to evolve, sometimes leaving gaps for hackers who can identify weaknesses and access this sensitive data. But it’s not simply a matter of patching up those holes: Hackers tend to move at least as quickly as the companies they target, so security is and will be an ongoing need for any company hoping to stay relevant and earn their customers’ trust—and thus we expect engineers with security expertise to be in high demand for the foreseeable future.
What increased demand means for compensation
Having in-demand skills doesn’t just mean that it’ll be easier to find a job, but also that you’ll be compensated accordingly. According to Hired’s data, blockchain and security engineers are often amongst the highest-paid engineers, suggesting that companies have adapted their hiring strategies to attract top talent with these specific skills.
It’s important to note that compensation can vary widely across geographies, both in terms of absolute numbers as well as which skills are compensated most highly. For example, engineering salaries across the board tend to be significantly lower in the U.K. and Europe, which is likely more reflective of the job market and compensation standards than it is of demand for these skills across markets. In addition to the insights from Hired’s 2019 Developer Report, our Salary Calculator tool can help technical talent of all types to better set their salary expectations based on where they live—and negotiate for a fair package when it comes time.
It’s clear that 2019 is both an exciting and challenging time to be a software engineer; new technologies are creating opportunities for career growth but also threatening to make old skills obsolete. Demand for software engineers of any type certainly isn’t going away any time soon, but it’s important to understand the market trends, and what you can do to remain competitive.
Everyone knows that relentless focus and prioritization are table stakes in managing a product to success. But as the product grows, and the list of priorities grows with it, it can become increasingly difficult to scale your own time and priorities as a busy PM.
This is where effective delegation can help you scale the focus of your product to ensure every single detail gets the attention and care it deserves. Read on to understand more about the following tips for effective delegation:
Know the limits of your focus
Scale your time across multiple priorities
Find the right people for delegation
Track delegated tasks using project management tools
Adjust your delegation strategy
Before we dive into how to delegate effectively, it’s important to understand why focus matters. Keep in mind these two fundamentals:
You are only one person and can only focus on a certain number of projects and tasks at a time. At some point, there are diminishing returns on the quality of the product as your focus spreads too thin across many competing tasks.
There are only 24 hours in one day. You can’t do it all yourself (and shouldn’t try to).
When it’s time to delegate: Knowing when it’s the right time to delegate is extremely important, as it can be hard to see in our busy day-to-day mindsets. If you find yourself balancing 5 or more projects concurrently you’re probably stretching yourself too thin. Delegating can help ensure your product gets the attention to detail it deserves across the entire experience; it’s much better to ship 3 high quality projects than 5 low quality projects.
Time to market is valuable: Quality and details are important but we all have deadlines to meet both internally and for the market. Time to market is key to everything we do. Something great that you could have shipped yesterday is losing its impact and value every day if it’s not in your customers’ hands yet. You want to avoid competition beating you to market as best as you can. While the first mover advantage is not always a winning strategy, it can have a big impact in many markets (e.g. AWS).
Scale your time across multiple, growing priorities
Product management gets more difficult as businesses scale — and the list of priorities grow with it. Scaling time and focus across priorities is critical to managing this growth. Follow these guidelines:
Keep the product roadmap updated and always ensure product priorities are aligned with your company’s strategic priorities.
Delegate priorities and areas of focus to PMs who are best fit for ownership.
Find the right people
Passion truly matters in building a great product. Look for a team member who is sincerely passionate about a particular area and if their skills and expertise fit, help mentor them into becoming a PM for that particular area. A few tips to ensure that process goes smoothly:
Coach, but never micromanage. The purpose of delegation is to scale the product and the team gracefully. Be a coach and provide guidance and assistance where you can, but keep in mind that micromanaging loses trust and creates dependency.
Remember: each PM needs to drive and own the product vision for their own projects. Build a great working relationship and trust each other to do the best job possible.
Delegate respectfully. Give the person you are delegating some context for your request– “This is a really important area, and I think you’d be a great owner of this because you have X, Y, and Z experience.”
Delegate tasks with project management tools
Not every product team has a dedicated Project Manager to track and manage what they do. In fact, it’s your job as a Product Manager to ensure nothing falls through the cracks on delivering across these priorities you have set for your product. This means putting your project management hat on and tracking them. Here are some key tips:
Roll up your sleeves and do the work. “It’s not my job to track this stuff” is a Bad Product Manager excuse when a task needs to get done on one of your projects. You may not be the one doing the actual work, but if it’s missed or late – you can bet that you’ll be responsible.
Use a software tool like JIRA or Asana to track tasks, task owners, ETAs, and dependencies.
When in doubt, always follow up – and re-document the ETA and task owner.
Communicate project status and align on action items with your team weekly, at a minimum.
Adjust your delegation strategy
Things move fast in the day-to-day of a PM. Your delegation strategy should keep pace as things shift and evolve. Follow these tips to adjust your delegation strategy effectively:
At the end of each day, take the time and space to think carefully about how you spent your time. Did you get to everything you wanted to accomplish?
Write down what you didn’t get done and track your progress again the next day. If you continue to miss your mark, consider delegating to another person who fits your team’s criteria for taking on the task.
Learn something new about delegating recently? Feel free to add to this list of tips below.
LinkedIn has added a new layer to professional networking and career growth, making connections easier—but also creating the need to keep your profile up-to-date and to stay in touch with valuable contacts. Rather than letting your LinkedIn languish, follow these tips to make the professional platform work for you.
It’s easier than you think
Whether you’re a fan of social networking platforms or not, the first step to making your online career profile work in your favor is acknowledging that it’s not meant to be difficult—and that it doesn’t have to be a huge time suck. The following best practices, while fairly simple, can help you to get started on the right foot:
Use a professional photo—and if you don’t have one, have a friend take your photo against a plain backdrop or use one that can pass as a professional headshot (not one from a party that you’ve cropped your friends out of).
Add a short description of each role you’ve held, highlighting key achievements.
Add your location, current position, and industry, as LinkedIn uses these to better tailor search results.
Include a brief intro/summary of your experience and interests to give profile visitors a better sense of who you are.
It’s fairly obvious that updating your LinkedIn when you’re looking for jobs is a good idea—but the time in between can be just as important. Even if you’re not in the market for a new job, having an up-to-date profile helps recruiters find the right candidates, and might land you an interview for something unexpectedly great. In addition, if you’re recruiting for your own team, having enough details on your profile can help the right talent get in touch.
That said, don’t assume that “keeping up” is a huge burden—instead, simply make a habit of reviewing your profile every few months to add new accomplishments, promotions, or extracurriculars you’ve taken on.
Make your feed more relevant
If your LinkedIn feed delivers content you’re actually interested in, chances are you’ll check it more regularly—and thus have a better sense of what your connections (and even industry experts) are thinking about. You can follow companies and people you’re interested in, whether or not you’re connected—and unfollow connections whose content you aren’t interested in. You can also hide posts that aren’t relevant, which helps the algorithm better understand what you’d like to see, leading to a feed you actually enjoy scrolling through.
Keep in touch
There’s no doubt that valuable connections can be made over LinkedIn, but—just as in the offline world—it’s important to stay top-of-mind in order to be more than just another random LinkedIn connection. If you’re trying to build a relationship with someone you haven’t met in person, give them something of value—an article that’s relevant to their interests, a unique perspective on something they post about, or a congratulations for a job change or other professional accomplishment.
Importantly, when it makes sense, try to convert some of your digital relationships to in-person ones. If one of your connections posts about an interesting event nearby, make an effort to attend and meet face-to-face. Don’t be afraid to ask people for coffee if there’s something specific you’d like to pick their brain about. But use common sense—networking over LinkedIn is similar to networking in-person in that people have a keen eye for authenticity, so be targeted in your strategy to connect with people you’re genuinely interested in meeting with.
Cross-functional teams consist of people from different functional roles who operate to deliver a certain project or meet a specific goal. A team may, for example, consist of a product manager, designer, salesperson, marketer, developers, and testers. Each of these roles have very different takes on a number of important questions, including:
What does hard work look like?
What is necessary for effective collaboration?
What is the most important part of a project?
What’s the best way to approach a challenge?
What does success look like?
These differing viewpoints can lead to friction and dysfunction within a team who isn’t appropriately managed. Effective management of a cross-functional team doesn’t differ much from effective leadership of any team except for this: extra focus must be placed on celebrating differences and specialties while breakingdown toxic barriers.
Set clear team goals… and keep talking about them!
Every team should have clear expectations for project timelines, budgets, and success criteria. Most importantly, these goals must be tied to team or project success, not individual contribution.
And don’t forget to talk about these goals daily: they should be top of mind for every individual. If things are going well, talk about why and celebrate it! If the project is falling behind or having issues, talk about why and work together to solve the issues and get back on track.
Make sure you spend time publicly celebrating the contributions of individuals to the team goal. Again, this should be done with any team, but with a twist on a cross-functional team: explain the success. This is an opportunity to show every functional role what really goes into this person’s day, how long it took, how difficult is was, and how important it was for the team’s success. This is an amazing and positive way to break down role-specific barriers while keeping the focus on team success.
Spend time with individuals to align personal goals
This is another leadership function that should exist on any team, but is especially important with a cross-functional one. On a single-function team, team goals can be broken into individual ones with ease. This is not as easy with cross-functional teams because team success is based on very different contributions from individuals coming together to create one amazing software product.
Spend time with every individual to understand what motivates them, design a goal that propels them while supporting the team, and build a plan to help them achieve it. For example, maybe your frontend developer is motivated by impressing end users, but having issues with poor user feedback. A good personal goal would be set around those reviews.
To help them achieve the goal, you can recruit your designer to help decision-making during development. In turn, your frontend developer will be able to elevate your designer’s understanding of the development process to potentially improve the designs moving forward. Individual goals like this support the project’s success and improve the team functionality by enabling this cross-training.
Prioritize learning and empower your team to own it
In a cross-functional team, there are two risks that stem from a lack of understanding. First, that people from differing roles have no idea what each other actually do. This can lead to distrust and dysfunction when aiming for a common goal. Second, because you are unlikely to be an expert in every field of the roles you are managing, there is a shortfall in skill development.
To handle these risks, the team must be ingrained with a spirit of personal development and an openness to learn. And critically, individuals within the team must be empowered to own that development.
Within roles, find mentors that are willing to help lead those with less experience. To cross-train and develop understanding and trust between roles, invest time in cross-functional shadowing. Everyone should know how hard the others are working and how they approach their work.
My first time on a cross-functional team, I spent half the day shadowing a developer. The next day he joined me to perform interviews with a number of salespeople and take a sales call. By the end, we both agreed: “I don’t know how to do what you do and I don’t want to do what you do, so I’m glad you’re on this team doing what you’re doing!”
Foster a unique team culture
Where clear team goals set the destination and individual goals are the wheels, team culture is the fuel. Building a culture with your team is the best way to break down the function-specific pride that individuals may have brought and reset that pride around the team itself.
This should be fun! Plan regular social events after work. If you can convince the powers that be to give the team a day off for an offsite, the time will be paid back with interest. And don’t underestimate the power of a team name, team logo, team slogan, or team shirts.
Recruit support from higher leadership
Most productive cross-functional teams have a leadership system that mirrors the cross-functionality of the team itself. Important decisions coming from the top will be received with much better understanding when those decisions are made in a room with various roles’ high-level leadership represented. This doesn’t always happen, so it’s your job as the leader to be a vocal proponent of changes that will improve your team’s wellbeing and chances of success.
Additionally, as previously discussed, you won’t always be the expert in the field for certain roles you are managing. Setting up mentorship programs is a good solution, but what about the mentors? If there isn’t a higher level functional leader that is available to help individuals on your team that you cannot, you need to recruit that support to fill your knowledge gaps.
The same core practices for leading any team apply to cross-functional teams. Because these teams are made up of people with different talents, different specializations, and different perspectives about work and success, the challenge is aligning the team and celebrating individuals while breaking down barriers between roles.
Talk about the team’s goals constantly, and set individual goals that align with it. Work on your team’s unique culture, and make sure that part of that culture is curiosity and desire to learn more about their own roles and the other roles on the team. And don’t be afraid to ask for support from those above you. The best teams work when individuals know they’re being represented fairly at every level of the organization.
Conflict in the workplace can be tricky. On the one hand, there’s nowhere to run in an uncomfortable situation—you’ll still see your co-workers tomorrow (or on Monday). But on the other hand (and the one we’ll argue here), avoiding conflict can be incredibly damaging to professional relationships, productivity, and even impact your career trajectory in the long term. So if you’re facing a difficult situation with colleagues, read on for a few reasons why you should confront the issue head on.
Unaddressed issues can cause strained communication
There’s no doubt that letting something fester can lead to unnecessary tensions, if not an entire breakdown in communication. Despite how much you tell yourself that it’s better not to cause a scene, some situations truly need to be addressed—and the team won’t be able to move forward until they are.
That said, it’s also important to be judicious about which situations you tackle head-on. You also don’t want to be the team member always causing problems, so pick your battles. Think about how much stress the unaddressed issue is causing you, and do your best to get a sense of what the other person (or people) feel about it in order to gauge whether it’s worth surfacing.
Teamwork becomes less effective when everyone is walking on eggshells
As a result of strained communication, teams often become less effective, spending time talking their way around an issue rather than actually getting work done. The opinions, feelings, and trade-offs usually made by the group as a collective become individual decisions, not only creating a barrier to communication but also impacting the team’s output. Worst case scenario, animosity begins to build between colleagues, creating an even bigger issue than existed before.
Your company can suffer as a result of unresolved conflict
It doesn’t take a rocket scientist to prove that strained communication and ineffective teamwork can harm a company, from negatively impacting the customer experience to causing high rates of employee churn. Instead, take the opportunity to step up and surface critical issues—your manager, team, and other employees (whether they know it or not) will appreciate it.
Confronting conflict can help build stronger relationships
Tackling conflict can also help you on a personal level. When you confront a colleague about an issue, you effectively re-open the communication channels—the first step to not only coming to a resolution in that particular instance, but also creating a process for future issues that arise—and thus building a more trusting relationship.
Think about it this way: If you never address an issue, you’ll never know what the outcome would have been—and you might always hold a grudge against that colleague (or colleagues) for a misunderstanding. In addition to putting stress on your relationship(s), this unknown can also create unnecessary stress for you—a true lose-lose situation.
Practicing conflict resolution can help build your confidence
Lacking the confidence to step up and say something is a common reason that people leave problems unaddressed (both in and outside of the workplace). Don’t trick yourself into believing that there’s nothing you can do about a conflict, or that your colleague is actually justified in his or her actions just because you’d rather not approach them.
Speaking up and surfacing the issue will ultimately build your confidence in your own convictions and ability to problem solve with colleagues. The next time there’s an issue, you’ll confidently surface the problem more quickly so that you can move forward with the appropriate solution and get back on track.
If you’ve already read Part 1 of this series, it should be clear that there is a major component to our development journey that requires some attention: the backend.
When I began programming, the distinction between frontend and backend wasn’t 100% clear to me. If you consider different architectures — servers, serverless, microservices– it can become overwhelming. My recommendation to anyone who finds themselves in this confused position is to first think about the most basic structure of an application.
The following time estimates assume 20-25 hours of study/week and some previous foundation in coding principles.
Phase 5: Learn Express with Node ~ 1 month
Node gives you the ability to “start a server,” which means your personal computer will dedicate a portion of its hardware and memory to execute your node code and actively listen on a particular port. As we develop our application, our frontend will be able to communicate with our backend by sending a request to this port that we are currently “listening” to.
For example, after we’ve typed in a username and password and clicked “login,” we’ll be sending a request from our frontend to our backend server, which has an “endpoint” at that port.
In the early stages of learning backend development, it’s most important to learn how to start a simple server on your computer and to develop an intuition on how this communication between frontend and backend happens through a series of requests and responses to your different backend endpoints. As your app evolves, you’ll have endpoints for different functionalities: myserver.com/login, myserver.com/user/profile, etc.
Phase 6: Databases ~ 1 month
The missing piece to a basic application architecture is a database structured to store and retrieve large amounts of data efficiently. Going back to the example with sign-in functionality (after our frontend has sent a ‘request’ to the backend endpoint www.myserver.com/signin), our backend will process the request, and then compare the credentials to what is saved in the database.
A proficient full stack developer knows how to structure a database for efficient lookup. However, this should be balanced with structuring the database for minimal duplication of data. Typically, a non-relational database offers a more simple structure and faster lookup, but more duplication of data (which means you will need to allocate more resources to accommodate for more data entries). Relational (mySql) databases have traditionally been the more common and cost-effective pick, but due to increasingly cheaper storage space, more and more are opting for the more straightforward non-relational database option.
Taking it a step further, if we want to deploy an application which also has backend code (our node code), we need a cloud server that will be able to constantly run this node code and actively respond to client requests. For starters, I recommend Heroku since I have found it to be the most straightforward. From there on, your code lives on servers that Heroku has configured, and any time that a new client request comes in to view your app, the bundled frontend code will be sent to that client. It will then be a series of requests and responses from the client to the Heroku servers, which is actively running the backend code.
This concludes your crash course in learning fullstack programming. In no way is this a definitive guide to learning; I’m not sure that exists for a skill set as broad as programming. Keep in mind that the right mindset is essential. Stay resourceful and persistent and you’ll develop the right style and learning process you need to achieve your goals.
There’s no avoiding the fact that learning programming takes serious dedication. In fact, it’s such an ambitious goal that the most crucial step is to develop the right mindset.
You should have monthly goals about topics you want to focus on in addition to daily progress goals (e.g. number of Codeacademy lessons, number of commits on your side project, and number of points). If you ever feel discouraged or overwhelmed, shift your frame of mind and focus on simply completing your daily task.
The other crucial component of a successful mindset is “learning to learn.” Seasoned developers are resourceful, constantly searching on Google, scanning through documentation, and chatting with fellow programmers when they hit a bug or roadblock. The things you build in the early stages won’t be beautiful, so enjoy the process itself and remember: there’s always a way to get it done.
The following time estimates assume 20-25 hours of study/week and some previous foundation in coding principles.
Phase One: HTML and CSS ~ 2 weeks
Get comfortable building static websites with only HTML and CSS. Avoid using templates at first by building the static site from two blank files: index.html and styles.css.
For both html and css I recommend Codeacademy. It goes step-by-step, and you can comfortably move at your own pace. The downside to Codeacademy is that there is a little too much hand-holding, so be sure to supplement it with your own project, which you start with a code editor. I recommend Sublime Text or Atom, and later you can look into Visual Studio Code, which has a couple more advanced features.
Phase Two: Responsive Layouts ~ 2 weeks
Step up your static game by making your websites responsive so that they look good on desktop, tablet, and mobile screens. I recommend first learning CSS Grid, which is a “native” functionality that most new browsers will all be able to display.
After that, consider Bootstrap, which is an open source component library. It includes a “grid system” which actually incorporates CSS grid and has additional “out of the box” components, such as sleek buttons.
In general, developers rarely code common components such as a navbar or button from scratch; there’s no reason to reinvent the wheel. Making sites perfectly responsive is an advanced feature — it can always look a little better — so often, developers will use templates.
Bearing this in mind, try to focus on only a couple crucial aspects of responsiveness: add a “hamburger menu” for mobile view and change a photo layout from horizontal (desktop) to vertical (mobile). It’s during this stage that you should also get comfortable using your browser’s web inspector. This will help not only with the styling but make you more comfortable with the overall HTML DOM.
To take your JS efficiency to the next level, you should master the easy coding challenges on coderbyte and leetcode. After you’re comfortable with the easy challenges, you can move onto medium or try codefights, which is my personal favorite. The challenges are gamified with a point system, which you can use to motivate yourself with daily goals, and even place on your resume as a way to attract recruiters.
After you’ve given 3-4 months worth of dedicated attention to these phases, you’re ready to move on to Part II.