Of course it's suitable! How do you believe event driven frameworks are implemented ? Using black magic ?
But there is a catch: yes procedural programming is suitable for graphical applications, but programmers will end up writing ther own event driven framework and object oriented layer because solving this kind of problem needs it.
By the way "Graphical application" is very misleading. The specific parts of rich user interfaces is about user interaction. Drawing complex graphics on screen is nothing special and does not really require specific frameworks or OO.
High level of user interaction is something completely different: the application *need* to react to external (user input, time) events. Either you use some event driven framework to do that, either you implement your own.
Creating it's own events framework is not very hard, depending on the complexity of the graphical environment you want to manage. It's merely reading user input and finding out what is shown on the screen at that time under the mouse (or the touched part of screen).
As graphical interfaces are metaphors of the real world, in some way they ever show visual representations of real world like objects, and you have to hold some internal description of these objects.
Willing it or not you end up writing Object Oriented code. As Object Orientation is mostly a point of view it's as easy using C than C++. In C you will have structs and famillies of functions using these structs. In C++ you'll have classes.
Some concepts like inheritance of common interfaces are a bit harder to express using C (they will need more code), but some may argue that the resulting software may be easier to understand from a maintenance point of view than the C++ equivalent.
Of course it actually depends of the programmer. I believe that like in many other cases the more complex syntax (and power) of C++ makes it a bit more slippery from a maintenance point of view and many programmers still have a poor understanding of objects. But it will certainly need less code.
First you prep. You have to remember reasonably well what you’ve done over the past 2–3 years, and have some self-awareness about what are your strengths, your weaknesses, what are your goals, what do you think of your career so far, where do you see it going etc.
This self-reflection should really happen naturally but if you haven’t taken a lot of time to do so, do yourself a favor and dedicate some time to this. It may help to actually write down your answers.
Now, in the interview.
How it works is that your interviewer is going to try to evaluate you according to 5–10 criteria. Those change co
First you prep. You have to remember reasonably well what you’ve done over the past 2–3 years, and have some self-awareness about what are your strengths, your weaknesses, what are your goals, what do you think of your career so far, where do you see it going etc.
This self-reflection should really happen naturally but if you haven’t taken a lot of time to do so, do yourself a favor and dedicate some time to this. It may help to actually write down your answers.
Now, in the interview.
How it works is that your interviewer is going to try to evaluate you according to 5–10 criteria. Those change company to company, and may be related to the engineering ladder, the values of the companies, etc. but not necessarily. That being said, there’s some commonality across companies, so it’s likely that things which are valued are: does this candidate care about results, are they a natural collaborator, does the candidate have a moral compass, etc.
Next, your interviewer is going to ask you questions, and each question is really an attempt to make you speak something directly about these criteria they care about. You want to answer to these questions just as directly as possible, using the memories of your last 2–3 years that you recently rehashed.
For instance, if your interviewer asks, tell me about a time you disagreed with someone more senior than you, well, you go back to your last 2–3 years of experience and fetch an anecdote where you did disagree with someone more senior than you. You don’t want to restrict your answers to stories where things magically went your way because you are so great. You can choose stories when you were wrong and acted upon getting feedback. Or when you two found a third way out of the confrontation. Basically, those would be stories where you used your skills as an engineer, not restricted to coding.
What you don’t want to do is one of the following:
- avoid the question. “I try to never be in a position where I would disagree with someone”. Not useful to the interviewer, and actually negative signal.
- answer the question with a non-work example. “I could bore you with something that happened with my director last year, but let me tell you about a time when I disagreed with my father.” Don’t do that. This is not useful to the interviewer. This means that whatever time you will spend with that story is not going to produce signal, that the interviewer can use to argue that the company should hire you, and you only have a limited number of opportunities to do so.
The more senior you go, the more you are expected to show that whatever they ask you is something you have previously thought about (because you most likely would have) and that the examples you choose confirm that you have the level expected by your interviewer.
Where do I start?
I’m a huge financial nerd, and have spent an embarrassing amount of time talking to people about their money habits.
Here are the biggest mistakes people are making and how to fix them:
Not having a separate high interest savings account
Having a separate account allows you to see the results of all your hard work and keep your money separate so you're less tempted to spend it.
Plus with rates above 5.00%, the interest you can earn compared to most banks really adds up.
Here is a list of the top savings accounts available today. Deposit $5 before moving on because this is one of th
Where do I start?
I’m a huge financial nerd, and have spent an embarrassing amount of time talking to people about their money habits.
Here are the biggest mistakes people are making and how to fix them:
Not having a separate high interest savings account
Having a separate account allows you to see the results of all your hard work and keep your money separate so you're less tempted to spend it.
Plus with rates above 5.00%, the interest you can earn compared to most banks really adds up.
Here is a list of the top savings accounts available today. Deposit $5 before moving on because this is one of the biggest mistakes and easiest ones to fix.
Overpaying on car insurance
You’ve heard it a million times before, but the average American family still overspends by $417/year on car insurance.
If you’ve been with the same insurer for years, chances are you are one of them.
Pull up Coverage.com, a free site that will compare prices for you, answer the questions on the page, and it will show you how much you could be saving.
That’s it. You’ll likely be saving a bunch of money. Here’s a link to give it a try.
Consistently being in debt
If you’ve got $10K+ in debt (credit cards…medical bills…anything really) you could use a debt relief program and potentially reduce by over 20%.
Here’s how to see if you qualify:
Head over to this Debt Relief comparison website here, then simply answer the questions to see if you qualify.
It’s as simple as that. You’ll likely end up paying less than you owed before and you could be debt free in as little as 2 years.
Missing out on free money to invest
It’s no secret that millionaires love investing, but for the rest of us, it can seem out of reach.
Times have changed. There are a number of investing platforms that will give you a bonus to open an account and get started. All you have to do is open the account and invest at least $25, and you could get up to $1000 in bonus.
Pretty sweet deal right? Here is a link to some of the best options.
Having bad credit
A low credit score can come back to bite you in so many ways in the future.
From that next rental application to getting approved for any type of loan or credit card, if you have a bad history with credit, the good news is you can fix it.
Head over to BankRate.com and answer a few questions to see if you qualify. It only takes a few minutes and could save you from a major upset down the line.
How to get started
Hope this helps! Here are the links to get started:
Have a separate savings account
Stop overpaying for car insurance
Finally get out of debt
Start investing with a free bonus
Fix your credit
First: What do you mean by "graphical applications"? Something with a graphical user interface (GUI), something doing graphics processing like 2d/3d animation renderer, graphical editors (e.g. something like a photo touchup tool), 3d/2d drafting, 3d/2d games, etc.?
Secondly what do you mean by "object oriented programs"? Were they written in the most common form of OOP, focusing on inheritance and polymorphism? Or the original object orientation idea regarding passing messages between object instances? Or is the program in modules acting like objects linking with each other? Or some combination
First: What do you mean by "graphical applications"? Something with a graphical user interface (GUI), something doing graphics processing like 2d/3d animation renderer, graphical editors (e.g. something like a photo touchup tool), 3d/2d drafting, 3d/2d games, etc.?
Secondly what do you mean by "object oriented programs"? Were they written in the most common form of OOP, focusing on inheritance and polymorphism? Or the original object orientation idea regarding passing messages between object instances? Or is the program in modules acting like objects linking with each other? Or some combination of these?
In all of those OOP may very well be suitable, or it may not. OOP (as used mostly, i.e. hierarchy and polymorphism being paramount) is nothing more than a way to structure the code in some controlled hierarchy enabling some benefits for re-use, maintainability, scalability, multiple contribution, etc. while loosing a small bit of performance through things like virtualizing methods (i.e. instead of directly calling a function, first look up the correct one in a virtual function table). And also enforcing a bit of added boilerplate (i.e. programmer overhead). So in some cases this may mean it helps a great deal in making programs more robust, easier to understand and modify. But in others it may mean you loose performance and need to refrain from using such virtual functions (though this is pretty rare and only of essence if the program isn't IO bound).
I'd say that for most GUI apps OOP (common type) is a very good choice - it maps onto GUI elements pretty neatly. Even when looking at OOP messaging types this maps very directly onto event passing, so works well in this scenario too. Especially as GUI means the program is extremely IO bound - it would spend nearly all its time on waiting for user input - micro optimizing performance would have NO effect whatsoever. There are other alternatives, e.g. research of FRP (Functional Reactive Programming), but you'd most likely find that in most work environments when doing GUI you're also doing OOP (be that good or bad being immaterial).
Most of the rest of those program types tend to have more hybrid ideas. Things like rendering engines / image manipulation libraries are built to be extremely RAM and CPU efficient, but they may be mapped onto an OOP hierarchy for use from the program itself. Some may add modules as a form of addon/plugin, e.g. allowing specialized algorithmic materials in a 3d modeller/renderer, filters for image manipulation, using various rendering engines, etc.
OO has its roots in ADTs and a paper written by David Parnas in Communications of the ACM in 1970. The first OO language (although not called that) was Simula 67, an extension of ALGOL, where stack frames were made persistent by moving off the stack, hence becoming objects.
In the 1970s, Xerox PARC developed Smalltalk as a general purpose language, but it also drove graphic interfaces. Around this time Alan Kay coined the term ‘object oriented’. He now thinks he should have called it ‘message oriented’, since it is the interfaces to the objects defining the messages which is more important.
Appl
OO has its roots in ADTs and a paper written by David Parnas in Communications of the ACM in 1970. The first OO language (although not called that) was Simula 67, an extension of ALGOL, where stack frames were made persistent by moving off the stack, hence becoming objects.
In the 1970s, Xerox PARC developed Smalltalk as a general purpose language, but it also drove graphic interfaces. Around this time Alan Kay coined the term ‘object oriented’. He now thinks he should have called it ‘message oriented’, since it is the interfaces to the objects defining the messages which is more important.
Apple did MacApp with Object Pascal, which it designed with Niklaus Wirth.
Thus OO has been tightly integrated with graphical applications, and it is ideal for that since it controls presentation of objects to the user.

Evaluating the suitability of procedural programming for graphical applications involves considering several factors, including the nature of graphical applications, the characteristics of procedural programming, and the requirements of modern software development. Here’s a thorough analysis:
Characteristics of Procedural Programming
- Structure: Procedural programming is based on a sequence of actions or commands. It emphasizes a linear flow of control, which can be straightforward for simple tasks.
- Modularity: Programs are often organized into functions or procedures, promoting code reuse and organization.
- State Management: Procedural programming typically relies on global or local state management, which can lead to difficulties in managing complex states in graphical applications.
Suitability for Graphical Applications
- Complexity of Graphics: Graphical applications often involve complex interactions, states, and events (e.g., user inputs, animations, rendering). Procedural programming can become cumbersome as the complexity increases. Managing multiple states and transitions can lead to tangled code and difficulties in maintenance.
- Event-Driven Architecture: Many graphical applications, especially those involving user interfaces, rely on event-driven programming. Procedural programming does not inherently support this paradigm, making it less suitable for applications that require responsive UI elements and asynchronous event handling.
- Code Organization: While procedural programming supports modularity, the organization can become less clear in larger applications. Object-oriented programming (OOP) is often preferred for graphical applications because it allows for better encapsulation of data and behavior, making it easier to manage complex interactions and hierarchies (e.g., different types of graphical objects).
- Performance Considerations: In graphics programming, performance is critical (e.g., rendering speed, frame rates). Procedural programming may not provide the optimizations available in more modern paradigms, such as OOP or functional programming, which can leverage concepts like polymorphism and higher-order functions for better performance.
- Development Tools and Libraries: Many modern graphics libraries (like OpenGL, DirectX, or game engines like Unity and Unreal Engine) are designed with OOP principles in mind, providing classes and objects that encapsulate functionality. This makes it easier to use these tools in an OOP context rather than a procedural one.
Conclusion
While procedural programming can be suitable for simple graphical applications or prototypes, it generally falls short for more complex, interactive, and performant graphical applications. The limitations in state management, lack of support for event-driven programming, and challenges in code organization make OOP or other paradigms (like component-based architecture) more appropriate for most modern graphical applications.
Recommendations
- For Simple Applications: Use procedural programming for small-scale projects or educational purposes where complexity is manageable.
- For Complex Applications: Adopt OOP or component-based design patterns to leverage better state management, code organization, and integration with modern graphics libraries.
This approach ensures that the application remains maintainable, scalable, and performant as it evolves.
There are a lot of research paper writing services available in the USA, but finding the best one can be quite challenging. To help you with this task, I have compiled a list of some of the top research paper writing services that you can consider:
- EssayShark. This service is known for its high-quality research papers and timely delivery. They have a team of experienced writers who are experts in various fields and can handle any topic or subject.
- WritingCheap. This service offers affordable prices and allows you to directly communicate with the writer working on your paper. They also have a mon
There are a lot of research paper writing services available in the USA, but finding the best one can be quite challenging. To help you with this task, I have compiled a list of some of the top research paper writing services that you can consider:
- EssayShark. This service is known for its high-quality research papers and timely delivery. They have a team of experienced writers who are experts in various fields and can handle any topic or subject.
- WritingCheap. This service offers affordable prices and allows you to directly communicate with the writer working on your paper. They also have a money-back guarantee in case you are not satisfied with the final result.
- CustomWritings. As the name suggests, this service specializes in providing custom research papers tailored to your specific requirements. They have a strict plagiarism policy and guarantee original content.
You can also find other services but it is important to make a wise choice. Read reviews or aks friends who have used similar services.
Not at all.
There are many hard things I do. Broadly speaking, they are structural. How do I work with large, legacy code I don’t understand? How do I design cleanly split up software? How do I apply TDD to get good designs?
There are other common challenges, relating to concurrency, data access, networks, scalability.
I’ve had jobs such as games, where advanced 3D vector maths and physics was required. Not just the ability to code it, but the ability to research/figure out the equations themselves, code the maths libraries, then write the code.
But in terms of the kinds of puzzles and algorithms
Not at all.
There are many hard things I do. Broadly speaking, they are structural. How do I work with large, legacy code I don’t understand? How do I design cleanly split up software? How do I apply TDD to get good designs?
There are other common challenges, relating to concurrency, data access, networks, scalability.
I’ve had jobs such as games, where advanced 3D vector maths and physics was required. Not just the ability to code it, but the ability to research/figure out the equations themselves, code the maths libraries, then write the code.
But in terms of the kinds of puzzles and algorithms you describe, I’ve not had to design any.
My response to this is to not ask questions like that in the interviews I am part of.
And like others, I had to suffer rejection from a job pre-screen on some online test where I didn’t quite work out an algorithm in the hour allocated. Nobody even got back to me about that. Just nothing happened.
My view was that if that company absolutely requires that all developers can complete those kinds of tasks, then they made the right decision.
Otherwise, their interview process successfully screened out a 30+ year experience candidate, with good agile/TDD/SOLID skills across multiple languages and industry verticals.
I think this is a truly sad state of affairs in our industry.
Next headline: “There’s a shortage of X language programmers…”
The most import thing is to think about is: who is going to use the thing you create and how are they going to use it? If you don’t get that right, no one will care that it was a most elegant OO design (or what ever design paradigm you care for). They will either not use it because it’s awkward or will never buy it because it doesn’t answer their need.
End user don’t care much about what a great software design an application has. They care about a tool that does exactly what they need it to do. You don’t use the chainsaw to cut a wedding cake. It may be good for trees or brush. It may be the b
The most import thing is to think about is: who is going to use the thing you create and how are they going to use it? If you don’t get that right, no one will care that it was a most elegant OO design (or what ever design paradigm you care for). They will either not use it because it’s awkward or will never buy it because it doesn’t answer their need.
End user don’t care much about what a great software design an application has. They care about a tool that does exactly what they need it to do. You don’t use the chainsaw to cut a wedding cake. It may be good for trees or brush. It may be the best chainsaw ever. But…
You get the drift. Think about your target user and what they want. If you don’t have a target user in mind, think about what you’re creating. Is it at all useful for anyone? Will people want this and what for?
Here’s the thing: I wish I had known these money secrets sooner. They’ve helped so many people save hundreds, secure their family’s future, and grow their bank accounts—myself included.
And honestly? Putting them to use was way easier than I expected. I bet you can knock out at least three or four of these right now—yes, even from your phone.
Don’t wait like I did. Go ahead and start using these money secrets today!
1. Cancel Your Car Insurance
You might not even realize it, but your car insurance company is probably overcharging you. In fact, they’re kind of counting on you not noticing. Luckily,
Here’s the thing: I wish I had known these money secrets sooner. They’ve helped so many people save hundreds, secure their family’s future, and grow their bank accounts—myself included.
And honestly? Putting them to use was way easier than I expected. I bet you can knock out at least three or four of these right now—yes, even from your phone.
Don’t wait like I did. Go ahead and start using these money secrets today!
1. Cancel Your Car Insurance
You might not even realize it, but your car insurance company is probably overcharging you. In fact, they’re kind of counting on you not noticing. Luckily, this problem is easy to fix.
Don’t waste your time browsing insurance sites for a better deal. A company called Insurify shows you all your options at once — people who do this save up to $996 per year.
If you tell them a bit about yourself and your vehicle, they’ll send you personalized quotes so you can compare them and find the best one for you.
Tired of overpaying for car insurance? It takes just five minutes to compare your options with Insurify and see how much you could save on car insurance.
2. Ask This Company to Get a Big Chunk of Your Debt Forgiven
A company called National Debt Relief could convince your lenders to simply get rid of a big chunk of what you owe. No bankruptcy, no loans — you don’t even need to have good credit.
If you owe at least $10,000 in unsecured debt (credit card debt, personal loans, medical bills, etc.), National Debt Relief’s experts will build you a monthly payment plan. As your payments add up, they negotiate with your creditors to reduce the amount you owe. You then pay off the rest in a lump sum.
On average, you could become debt-free within 24 to 48 months. It takes less than a minute to sign up and see how much debt you could get rid of.
3. You Can Become a Real Estate Investor for as Little as $10
Take a look at some of the world’s wealthiest people. What do they have in common? Many invest in large private real estate deals. And here’s the thing: There’s no reason you can’t, too — for as little as $10.
An investment called the Fundrise Flagship Fund lets you get started in the world of real estate by giving you access to a low-cost, diversified portfolio of private real estate. The best part? You don’t have to be the landlord. The Flagship Fund does all the heavy lifting.
With an initial investment as low as $10, your money will be invested in the Fund, which already owns more than $1 billion worth of real estate around the country, from apartment complexes to the thriving housing rental market to larger last-mile e-commerce logistics centers.
Want to invest more? Many investors choose to invest $1,000 or more. This is a Fund that can fit any type of investor’s needs. Once invested, you can track your performance from your phone and watch as properties are acquired, improved, and operated. As properties generate cash flow, you could earn money through quarterly dividend payments. And over time, you could earn money off the potential appreciation of the properties.
So if you want to get started in the world of real-estate investing, it takes just a few minutes to sign up and create an account with the Fundrise Flagship Fund.
This is a paid advertisement. Carefully consider the investment objectives, risks, charges and expenses of the Fundrise Real Estate Fund before investing. This and other information can be found in the Fund’s prospectus. Read them carefully before investing.
4. Earn Up to $50 this Month By Answering Survey Questions About the News — It’s Anonymous
The news is a heated subject these days. It’s hard not to have an opinion on it.
Good news: A website called YouGov will pay you up to $50 or more this month just to answer survey questions about politics, the economy, and other hot news topics.
Plus, it’s totally anonymous, so no one will judge you for that hot take.
When you take a quick survey (some are less than three minutes), you’ll earn points you can exchange for up to $50 in cash or gift cards to places like Walmart and Amazon. Plus, Penny Hoarder readers will get an extra 500 points for registering and another 1,000 points after completing their first survey.
It takes just a few minutes to sign up and take your first survey, and you’ll receive your points immediately.
5. Get Up to $300 Just for Setting Up Direct Deposit With This Account
If you bank at a traditional brick-and-mortar bank, your money probably isn’t growing much (c’mon, 0.40% is basically nothing).
But there’s good news: With SoFi Checking and Savings (member FDIC), you stand to gain up to a hefty 3.80% APY on savings when you set up a direct deposit or have $5,000 or more in Qualifying Deposits and 0.50% APY on checking balances — savings APY is 10 times more than the national average.
Right now, a direct deposit of at least $1K not only sets you up for higher returns but also brings you closer to earning up to a $300 welcome bonus (terms apply).
You can easily deposit checks via your phone’s camera, transfer funds, and get customer service via chat or phone call. There are no account fees, no monthly fees and no overdraft fees. And your money is FDIC insured (up to $3M of additional FDIC insurance through the SoFi Insured Deposit Program).
It’s quick and easy to open an account with SoFi Checking and Savings (member FDIC) and watch your money grow faster than ever.
Read Disclaimer
5. Stop Paying Your Credit Card Company
If you have credit card debt, you know. The anxiety, the interest rates, the fear you’re never going to escape… but a website called AmONE wants to help.
If you owe your credit card companies $100,000 or less, AmONE will match you with a low-interest loan you can use to pay off every single one of your balances.
The benefit? You’ll be left with one bill to pay each month. And because personal loans have lower interest rates (AmONE rates start at 6.40% APR), you’ll get out of debt that much faster.
It takes less than a minute and just 10 questions to see what loans you qualify for.
6. Lock In Affordable Term Life Insurance in Minutes.
Let’s be honest—life insurance probably isn’t on your list of fun things to research. But locking in a policy now could mean huge peace of mind for your family down the road. And getting covered is actually a lot easier than you might think.
With Best Money’s term life insurance marketplace, you can compare top-rated policies in minutes and find coverage that works for you. No long phone calls. No confusing paperwork. Just straightforward quotes, starting at just $7 a month, from trusted providers so you can make an informed decision.
The best part? You’re in control. Answer a few quick questions, see your options, get coverage up to $3 million, and choose the coverage that fits your life and budget—on your terms.
You already protect your car, your home, even your phone. Why not make sure your family’s financial future is covered, too? Compare term life insurance rates with Best Money today and find a policy that fits.
I just got my job offer at google. I bought this book for my behavioral interview preparation. I came across it on Blind.
I did the whole preparation 2 days before the interview and got my satisfied offer in the end. I would say it’s worth the investment. But if you are looking for a senior position, some answer examples in the book could be too simple.
As an engineering manager, this has never been a question I've planned to ask during an interview. The topic has come up once or twice in the last few years (and I've done a LOT of interviews in that time), but it's not something I ask to asses some technical or personal aptitude. Rather it's because I like my interviews to feel much more like a conversation between two people with similar interests.
One example of this topic was when someone mentioned experience of QBasic. That was interesting to me because that was one of my earliest experiences in programming. So we talked about that. All ou
As an engineering manager, this has never been a question I've planned to ask during an interview. The topic has come up once or twice in the last few years (and I've done a LOT of interviews in that time), but it's not something I ask to asses some technical or personal aptitude. Rather it's because I like my interviews to feel much more like a conversation between two people with similar interests.
One example of this topic was when someone mentioned experience of QBasic. That was interesting to me because that was one of my earliest experiences in programming. So we talked about that. All out of interest, and building a rapport with the candidate as well as helping them to relax.
In short, they're probably just showing an interest. Not every question during an interview is meant to assess a specific skill.
Like many of you reading this, I’ve been looking for ways to earn money online in addition to my part-time job. But you know how it is – the internet is full of scams and shady-grady stuff, so I spent weeks trying to find something legit. And I finally did!
Freecash surprised me in all the right ways. I’ve earned over $1,000 in one month without ‘living’ on the platform. I was skeptical right up until the moment I cashed out to my PayPal.
What is Freecash all about?
Basically, it’s a platform that pays you for testing apps and games and completing surveys. This helps developers improve their appl
Like many of you reading this, I’ve been looking for ways to earn money online in addition to my part-time job. But you know how it is – the internet is full of scams and shady-grady stuff, so I spent weeks trying to find something legit. And I finally did!
Freecash surprised me in all the right ways. I’ve earned over $1,000 in one month without ‘living’ on the platform. I was skeptical right up until the moment I cashed out to my PayPal.
What is Freecash all about?
Basically, it’s a platform that pays you for testing apps and games and completing surveys. This helps developers improve their applications while you make some money.
- You can earn by downloading apps, testing games, or completing surveys. I love playing games, so that’s where most of my earnings came from (oh, and my favorites were Warpath, Wild Fish, and Domino Dreams).
- There’s a variety of offers (usually, the higher-paying ones take more time).
- Some games can pay up to $1,000 for completing a task, but these typically require more hours to finish.
- On average, you can easily earn $30–50/day.
- You pick your options — you’re free to choose whatever apps, games, and surveys you like.
Of course, it’s not like you can spend 5 minutes a day and become a millionaire. But you can build a stable income in reasonable time, especially if you turn it into a daily habit.
Why did I like Freecash?
- It’s easy. I mean it. You don’t have to do anything complicated. All you need is to follow the task and have some free time to spend on it. For some reason, I especially enjoyed the game Domino Dreams. My initial goal was to complete chapter 10 to get my first $30, but I couldn’t stop playing and ended up completing chapter 15. It was lots of fun and also free money: $400 from that game alone.
- No experience needed. Even if you’ve never done any ‘testing’ before, you can do this. You get straightforward task descriptions, so it’s impossible to go wrong. A task you might expect is something like: Download this game and complete all challenges in 14 days.
- You can do it from anywhere. I was earning money while taking the bus, chilling on the couch, and during my breaks.
- Fast cashing out. I had my earnings in my PayPal account in less than 1 day. I’m not sure how long it takes for other withdrawal methods (crypto, gift cards, etc.), but it should be fast as well.
- You can earn a lot if you’re consistent. I’ve literally seen users in the Leaderboard making $3,000 in just one month. Of course, to get there, you need time, but making a couple of hundred dollars is really easy and relatively fast for anyone.
Don’t miss these PRO tips to earn more:
I feel like most users don’t know about these additional ways to make more money with Freecash:
- Free promo codes: You can follow Freecash on social media to get weekly promo codes for free coins, which you can later exchange for money.
- Daily rewards and bonuses: If you use the platform daily, you’ll get additional bonuses that help you earn more.
- In-app purchases to speed up processes: While playing, you can buy items to help speed up task completion. It’s optional, but it really saved me time, and I earned 4x more than I spent.
- Choose the highest-paying offers: Check New Offers and Featured Offers to get the best opportunities that pay the most.
Honestly, I still can’t believe I was able to earn this much so easily. And I’ve actually enjoyed the whole process. So, if you’re looking for some truly legit ways to earn money online, Freecash is a very good option.
Software companies typically have a “framework” or a “ladder” that describes objectively what skillsets are required to perform at any given level. (Some of these companies make these frameworks public, see progression.fyi for a nice collection).
There is a lot of overlap between these. At Uber the 6 engineering competencies are citizenship, software engineering, design and architecture, execution and results, collaboration and creating efficiency.
An onsite interview typically has 5 rounds, 2 being coding, 1 on architecture, and 2 behavioral interviews. Coding rounds assess “software engineerin
Software companies typically have a “framework” or a “ladder” that describes objectively what skillsets are required to perform at any given level. (Some of these companies make these frameworks public, see progression.fyi for a nice collection).
There is a lot of overlap between these. At Uber the 6 engineering competencies are citizenship, software engineering, design and architecture, execution and results, collaboration and creating efficiency.
An onsite interview typically has 5 rounds, 2 being coding, 1 on architecture, and 2 behavioral interviews. Coding rounds assess “software engineering”, architecture evaluates “design and architecture”, and so behavioral interviews score the non-technical competencies.
It’s pretty easy to rank candidates on how well they do on coding challenges. But that’s not enough to determine at what level a candidate should be hired. That’s the main goal of behavioral interview, they give much more signal to level the candidate.
At lower levels they focus on the attitude of candidates, whether they understand what's expected of them in a software organization or in a project context, how they navigate interpersonal relationships.
At mid levels interviewers expect more autonomy from a candidate. Candidate should be able to demonstrate they have worked on hard problems, have experience mentoring, have influenced the organizations they work in. Interviewers also start to factor in more heavily the candidate communications skills who should be able to express their thoughts clearly.
At higher levels candidates need to establish leadership and show they can engage an organization and effect change at a high level, how they can work with folks across organizational lines, identify large scale problems and tackle them. Candidates should not just be able to describe their experiences clearly but also show that they have developed a philosophy, a thought system about the work they do.
With that in mind, what are tips for behavioral interviews?
- self awareness. Candidates should recall in detail their past work history (or equivalent, college etc.) especially the recent years. They should have in mind the difficulties they faced, especially in working with others, but also what they have accomplished. Anytime a candidate is free to collect their thoughts rather than answering immediately a question but actually this is always detrimental. Having a ready answer to any question is a huge advantage, as is being able to dive deeper into any story.
- have the large picture in mind. Remember the purpose of the behavioral interview is to level the candidate especially on non-technical skills. Behind most questions there is a thin-veiled attempt to grade the candidate on one of the dimensions of the engineering ladder of the company. Don’t think outside of the box or try to outsmart the question. For example to the question: tell me about one of your accomplishments? every so often, candidates insist to talk about a non-work accomplishment. By so doing they miss an opportunity to prove that they are good on the things we care about in a work interview!
- The best way to practice is to interview candidates. Interviewing candidates gets you a whole range of perspectives and make you reflect on your own trajectory and as a result make you much stronger as a candidate.
Some do.
I do, though mostly indirectly, through test automation.
My job primarily focuses on testing weather mapping software, which is a graphics technology. My colleagues (the developers) build that software using tools including WebGL and React.
The most obvious software engineering roles with a relation to graphics are game developers, graphics firmware developers, and rendering application developers. These software engineers typically require an advanced understanding of how the graphics rendering process works.
But I’ve also worked on projects where there is no graphical component, on APIs
Some do.
I do, though mostly indirectly, through test automation.
My job primarily focuses on testing weather mapping software, which is a graphics technology. My colleagues (the developers) build that software using tools including WebGL and React.
The most obvious software engineering roles with a relation to graphics are game developers, graphics firmware developers, and rendering application developers. These software engineers typically require an advanced understanding of how the graphics rendering process works.
But I’ve also worked on projects where there is no graphical component, on APIs and databases which send raw data to other applications. Some of the software engineers I worked with on those projects had no experience in designing or building graphics applications.
I would say to be completely honest. When we search for new team members we are not looking for people that will be like us or behave in a way that we expect. We need to know how to communicate with you, what type of teamwork suits you best etc.
My answer is to answer them honestly. You will feel better in the workplace and your superior will know how to work with you.
This is for software developer role. Based on the resume, I would frame the questions to understand the following,
- Knowledge/Proficiency in Test Driven Development.
- Writing a code in different language/tools/environment. Probe to get examples from his/her previous work for this(Warming up to the idea of coding in different platform alone won’t be sufficient).
- How would you estimate a typical feature request?. Candidate can pick her/his own example.
- What are the questions she/he would ask about the project on her/his 1st week(Assuming no or very minimal introduction is given but a work is assigned)
This is for software developer role. Based on the resume, I would frame the questions to understand the following,
- Knowledge/Proficiency in Test Driven Development.
- Writing a code in different language/tools/environment. Probe to get examples from his/her previous work for this(Warming up to the idea of coding in different platform alone won’t be sufficient).
- How would you estimate a typical feature request?. Candidate can pick her/his own example.
- What are the questions she/he would ask about the project on her/his 1st week(Assuming no or very minimal introduction is given but a work is assigned)?.
- Following questions are expected, not in any particular order..
- Is there a Project Plan & What is the planned completion date and are we on track?.
- Do we have a documented consent/approval for the scope & work so far?.
- What are the unknowns/dependencies that affects my deliverables?. Who depends on my work?.
- What is the escalation/warning process/mechanism if something don’t work or goes wrong?.
- Where is Requirement Specification and/or Technical Design document?.
- Are there any coding guidelines ?.
- Is there a dedicated testing team?. Do we have use cases/test cases available?.
- Who is authorised/empowered to make what decision?.
- If no guidance/expectations set, what are the status updates he/she would send to her/his boss or customer?. What details would be in such status?.
- A status update is expected to answer the following questions but it must be based on the need.
- “# of days/hours behind Schedule or On Schedule”, Then percentage of work completion.
- List of risk/dependencies that affects the schedule or cost. (This is to avoid unpleasant surprises)
- Upcoming milestones or anything that needs attention.
I find coding skills are often exaggerated. These days with stack overflow and with colleagues help, almost anyone can complete a coding work. But it is the other things such as “Requirements, Priority of features, Cost, Who uses the software and how (much) it is used..etc” are determining the true value of a software. It is like running in a treadmill. If I keep running hard, I will get fit but won’t move from point A to B. Sheer coders without these other skills are like those treadmill runners. Another anology is of a car. A good engine(coding skill) is nice but without Steering & Brakes the car is useless.
Doing right software is more valued than doing the software right!.
I would go through each job for the last dozen years or so pointing out key technologies or concepts that apply to the current role.
I am a software engineer but also a 3rd-year physics major. I have been fascinated by the intersection of both fields. I am also very interested in graphics. Here are some areas of math I’ve found useful for graphics.
- Linear Algebra is the most important.
- Transformation matrices: Used for scaling, rotation, translation, and projection of objects in 2D and 3D space.
- Vector operations: Manipulating points, vectors, and normals.
- Matrix operations: Multiplication, inversion, and determinant calculations for transformations and coordinate systems.
- See this video as an example.
I am a software engineer but also a 3rd-year physics major. I have been fascinated by the intersection of both fields. I am also very interested in graphics. Here are some areas of math I’ve found useful for graphics.
- Linear Algebra is the most important.
- Transformation matrices: Used for scaling, rotation, translation, and projection of objects in 2D and 3D space.
- Vector operations: Manipulating points, vectors, and normals.
- Matrix operations: Multiplication, inversion, and determinant calculations for transformations and coordinate systems.
- See this video as an example.
- Geometry
- Euclidean geometry: Understanding concepts such as lines, planes, angles, distances, and intersections.
- Parametric curves and surfaces: Used for representing and manipulating shapes like splines, Bézier curves, and NURBS.
- Non-euclidean geometry e.g spherical and parabolical are sometimes used in games for crazy effects.
- Trigonometry
- Trigonometric functions: Understanding angles, rotations, and periodic behavior essential for rotations and transformations.
- Trigonometric identities: Used for solving geometric problems, interpolation, and shading calculations.
- Coordinate Systems
- Polar, Cartesian, Cylindrical, Spherical
- Probability and Statistics
- Monte Carlo methods: Used for approximating complex lighting, shading, and global illumination effects.
- Sampling techniques: Employed to simulate complex phenomena like motion blur and anti-aliasing.
- Calculus
- Derivatives: Used for calculating gradients and rates of change, essential for simulations and shading.
- Integration: Used for tasks like numerical integration for rendering algorithms and physics simulations.
- Euler Integration and Verlet Physics are used in many game engines to change the position of a body over time.
Don’t be scared by the sheer volume of this.
Start by watching the coding train channel on youtube. It will guide you on how to start.
I write on medium at
My newsletter
https://stephenadesina.substack.comI do it all the time. First, and most important step: UNDERSTAND THE PROBLEM. If you’re working with a client then speak with them about it the REALLY UNDERSTAND what is being asked of you. If you’re part of a technical team then you may have to trust your program manager, but ask questions and get as much information as possible. It’s then a matter of designing a solution. Are you using technology you understand? Then start breaking the task up into smaller tasks. If it’s an unfamiliar technology, find people who will share their expertise. Don’t just start coding; think through the solution
I do it all the time. First, and most important step: UNDERSTAND THE PROBLEM. If you’re working with a client then speak with them about it the REALLY UNDERSTAND what is being asked of you. If you’re part of a technical team then you may have to trust your program manager, but ask questions and get as much information as possible. It’s then a matter of designing a solution. Are you using technology you understand? Then start breaking the task up into smaller tasks. If it’s an unfamiliar technology, find people who will share their expertise. Don’t just start coding; think through the solution and ask more questions. Once you start coding there will be more questions. Do you notice a theme? Communication is vital and once you present your solution it will feel great. Best of luck!
What Software Engineers Should Know About Computer Graphics
Software engineers should understand the fundamentals of computer graphics to develop visually appealing and efficient applications. They should grasp concepts like rendering techniques, shading algorithms, and image processing to optimize graphic performance. Familiarity with graphics libraries and APIs such as OpenGL and DirectX is crucial for creating interactive and immersive graphical experiences. Additionally, knowledge of vector graphics, rasterization, and color theory enhances their ability to design engaging user interfaces a
What Software Engineers Should Know About Computer Graphics
Software engineers should understand the fundamentals of computer graphics to develop visually appealing and efficient applications. They should grasp concepts like rendering techniques, shading algorithms, and image processing to optimize graphic performance. Familiarity with graphics libraries and APIs such as OpenGL and DirectX is crucial for creating interactive and immersive graphical experiences. Additionally, knowledge of vector graphics, rasterization, and color theory enhances their ability to design engaging user interfaces and visualizations. For a user-friendly introduction to graphic design, try CorelDRAW Graphics Suite, offering powerful vector illustration and photo editing tools.
It’s very applicable to real time embedded control and networking areas.
In real time systems, the CPU tends to do very little except reactto events from sensors. Like ‘start button pressed’ and ‘correct temperature reached’. The code then makes actuators do things; which might be ‘turn water heater on’ and ‘turn water heater off’. Alarm conditions like ‘temperature too high’ also nicely form events.
Networking like with TCP or HTTP is similar. Packet received, connection available and so on are all nice events.
Event based systems definitely have wider applicability than just GUIs
Same as any field of endeavor:
- “Do I want to to do it?”
If yes, good so far. If not… Why are we talking about this?? - “Do I have an aptitude for it?”
There’s an old saying: “Many are called, few are chosen.”
Just because you want to do something does not mean you can. (I’d be thrilled to be a pro-level cyclist—I am not! And I never will be!!) - “Am I willing to spend hour after hour, day after day, week after week, month after month and year after year honing my knowledge and skills?”
If yes: Congratulations! You may attempt to become a software developer.
If no: Please do not bother those of us who
Same as any field of endeavor:
- “Do I want to to do it?”
If yes, good so far. If not… Why are we talking about this?? - “Do I have an aptitude for it?”
There’s an old saying: “Many are called, few are chosen.”
Just because you want to do something does not mean you can. (I’d be thrilled to be a pro-level cyclist—I am not! And I never will be!!) - “Am I willing to spend hour after hour, day after day, week after week, month after month and year after year honing my knowledge and skills?”
If yes: Congratulations! You may attempt to become a software developer.
If no: Please do not bother those of us who are seriously trying to advance software technology.
That’s pretty much the definition of “correctly” - so yes!
But “correctly” and “run without problems” are kinda slippery terms.
You can argue that “correct code” is that which adheres to the language standard - so if your code compiles without errors, then it’s a “correct” program as far as the programming language standard is concerned. By that standard then there is a guarantee that the code will do what you told it to do. But if you wrote code to calculate Pi and your function says: “return 3.0;” then this linguistically correct program has a rather serious flaw in it.
In truth, we cannot writ
That’s pretty much the definition of “correctly” - so yes!
But “correctly” and “run without problems” are kinda slippery terms.
You can argue that “correct code” is that which adheres to the language standard - so if your code compiles without errors, then it’s a “correct” program as far as the programming language standard is concerned. By that standard then there is a guarantee that the code will do what you told it to do. But if you wrote code to calculate Pi and your function says: “return 3.0;” then this linguistically correct program has a rather serious flaw in it.
In truth, we cannot write code that its perfectly “correct”. It’s absolutely certain that any program of any significant size has bugs in it. Sure, you can write little ‘toy’ programs of maybe 1000 lines that are perfect - but once you get into the realms of 10,000 lines, 100,000 lines or more - bugs are absolutely, 100% certain!
Even when you put in place the most rigorous possible testing and QA procedures, there WILL be bugs in very large programs.
How robust?
Look up “clean room engineering” R.C. Linger for a good solid technique. In short, use logic to clarify the preconditions, the side effects and the post-conditions for each statement in your code. Each function will then end with a set of post-conditions that are guaranteed by that function’s code.
This is nearly impossible to do in practice unless you use “Functional Decomposition” (where were you in ‘82!) and that is almost impossible to do for any normal/large sized system unless you use solid Object Oriented design techniques, especially encapsulation (look up SOLID).
Code in vert
How robust?
Look up “clean room engineering” R.C. Linger for a good solid technique. In short, use logic to clarify the preconditions, the side effects and the post-conditions for each statement in your code. Each function will then end with a set of post-conditions that are guaranteed by that function’s code.
This is nearly impossible to do in practice unless you use “Functional Decomposition” (where were you in ‘82!) and that is almost impossible to do for any normal/large sized system unless you use solid Object Oriented design techniques, especially encapsulation (look up SOLID).
Code in vertical slices, not by layers. Write the smallest bit of the UI. Write all of the support code needed to get that bit of the UI to work. (versus writing all of the low level code, then the middleware, then the GUI). Then add the next slice.
Think in terms of “services”. This is an overused term, but think of it as a top level pillar that handles a suite of behaviors, e.g. the communications service handles all communication to a device or a server, the protocol service handles all the commands and responses sent to the device/server via the communications service. The Controller (of MVC fame) will then just communicate at a high level with a suite of services.
Work out not only the overall system architecture but also the “micro-architecture” i.e. how do the big chunks of behaviors fit together, but also how do the smaller pieces fit together? Refactor as needed as you discover how the top level code has to work.
Use automation E2E testing to confirm these top level pieces work together well. This means that you will be writing code to be testable. This will almost always force you to use very tight OOD techniques especially single purpose and encapsulation i.e. each service presents a very clean, very well defined interface to the outside world
Finally don’t try to figure it all out by yourself. Use code reviews. Use lint.
in summary, this will work:
- use small, completely encapsulated classes, each with a single purpose
- have all of the OO methods in that class be singular and tiny.
- Ensure those methods are single purpose and tiny.
- Use logic techniques to do this for each method:
- clearly state and ensure the preconditions for the method e.g. either use guard clauses or asserts
- clearly specify the expected side-effects
- clearly specific the expected post-conditions
- use unit tests to double-check all of this at a class level
- Use services to break up the top level behaviors
- use automated E2E tests to confirm it’s good at the upper levels
- use static analysis tools to help find code smells
- use code reviews for an additional double-check
I don’t think programming interviews should be pop-quizzes
It irritates me that a position that should be focused on actual problem-solving has been relegated to evaluating talent like they are highschool students in an english class.
What should software engineering interviews test for?
- Conceptual and terminology understanding - Depending on position a loose or specific knowledge of a task, toolsets, or coding standard may be required but ultimately you just want to know “can this person work the way the rest of our team works using tools our team knows or would like to embrace going forward?”.
I don’t think programming interviews should be pop-quizzes
It irritates me that a position that should be focused on actual problem-solving has been relegated to evaluating talent like they are highschool students in an english class.
What should software engineering interviews test for?
- Conceptual and terminology understanding - Depending on position a loose or specific knowledge of a task, toolsets, or coding standard may be required but ultimately you just want to know “can this person work the way the rest of our team works using tools our team knows or would like to embrace going forward?”. My current job asked me about my perforce and git experience and those are daily relevant tools that are valuable to my specific role.
- Understanding related to daily tasks - If they aren’t writing string reverse parsing functions on the fly daily then taking the limited time you have to evaluate them to ask them to do just that feels wasteful. Ask them to write a simple script doing something you do a lot in your work . At one of my companies we worked with car data daily, an effective test would have been showing them a webpage and asking someone to write a basic class encapsulating all the various car data we were working with, what data they’d choose to exclude, what data they would choose to pick, ask them to make a small interface that allows them to navigate and display the data . That was work relevant, simple enough to determine style or lack of, and allows you to give them a simple resource to determine their problem solving approach . All stuff we did daily and anyone joining us should be able to do.
- Communication skills - I think all of us have worked with someone brilliant who could not articulate what they were doing or desired and THAT is extremely frustrating because they can deviate or drive the project in a direction that puts your organization in a hard place to climb out of and the rest of the organization may not even understand it’s happening! Does the person interviewing understand how to take their goal and your value as a stakeholder into consideration? Are they open to questions , can they tell you the intended direction or goals they are trying to achieve and how they’d achieve them ? If you can’t communicate with them to accomplish a simple task is it realistic that you can learn to communicate with them when you assign them more complex tasks? Do they have respect for other departments ? Are they someone who will upset other stakeholders ? Poor communication is just as bad if not worse than poor code , a poor communicator is often a great culprit for unrealized technical debt later on
- Behavioral - It’s hard to lead someone who won’t take your direction no matter how brilliant they are. When you ask them about past projects and failures was everyone else in the room the culprit always ? Are you one of their future problems if you hire them ? How do they respond to adversity ? Some people check out when the pressures on and others lock-in , the last thing you want is someone who can’t be found when you need all hands on deck. Do they know how to manage their “ professional voice “ ? It doesn’t cost anything to be courteous and respectful even in disagreement . Can they learn? Do they mind learning ? Do they hate anytime the work deviates from their predefined desires? Tech is constantly moving the last thing you want to do is hire someone who is going to oppose change Day 1.
Look I understand tech interviewing is hard, understanding people and how they fill a role in a larger organization is hard! Add onto that you only have a few hours to determine if someone is worth a high 5 or 6 figure salary and of course throwing a problem at them and letting that determine their value offloads the responsibility and complexity of being marked as the responsible decision-maker in the case of a bad hire.
However I am deeply dissatisfied with what the current tech interviewing landscape is . I think it prioritizes people who can stomach looking at the same exact series of problems multiple times and survive studying extreme repitition with little to no creativity needed and in my professional experience software engineering can change DRASTICALLY from day to day. This week at my day job I had to write code that changed the naming scheme for exported assets, yesterday i finsished writing a consumer facing introductory tech document, and the day before that I put out a fire that on our project was outputting video assets at the incorrect frame rate in specific locations in our app .
I think the role of a software engineer is quite dynamic and requires understanding and being able to not just build according to your own vision but the vision of others as well. I wish more tech interview prioritized trying to search for and understand these factors in tech talent.
An interactive interface is not necessarily a graphical one. It depends on how linear your interaction is, not whether there are images involved. Interfaces that use, for instance, CUPS to create fields and controls in text are then often event-driven.
At the opposite end of the world, event-driven logic can be a reasonable approach to interprocess communication and connections between services. The Python approach via ‘tornado’ or the new ‘asyncio’ works this way, instead of pretending to run threads. Having data be ready is an event.
Imagine you bought a new car and drove it home. You drove it every day for a week. No problems. The following day, you cannot drive it because overnight, the road has narrowed down to 2 feet in width.
Situations like this happens with software ALL the time. No matter how meticulously written, there is a very strong chance that the software would have to be re-written very soon. Either the OS would change or the requirements would change or some underlying technology would make your software feel like a snail on Valium.
I once met a guy who wrote a crew scheduling software for an airline. He told
Imagine you bought a new car and drove it home. You drove it every day for a week. No problems. The following day, you cannot drive it because overnight, the road has narrowed down to 2 feet in width.
Situations like this happens with software ALL the time. No matter how meticulously written, there is a very strong chance that the software would have to be re-written very soon. Either the OS would change or the requirements would change or some underlying technology would make your software feel like a snail on Valium.
I once met a guy who wrote a crew scheduling software for an airline. He told me that they had to make major changes every year to comply with the latest regulations, company policies and the new crew contracts. Add in the moving technology and new reporting ideas people came up with and it was like they were in development mode ALL the time.
If I ask such a question, I’m usually not trying to evaluate anything specifically.
I’m making small talk intended to relax us both into the interview. Depending on the resume, I might also be gauging which questions would be a good fit for the rest of the interview.
While some interviewers might try to squeeze signal out of every word, I don’t think most do.
NOTHING!!
Under NO CIRCUMSTANCES should HR people should be asking technical questions of candidates. NEVER!!
I am a computer graphics engineer (and a very senior one)…and I’ve been involved in hundreds of hirings over the last 45 years in the graphics business…so I’m very familiar with the process from both the employer and the candidates side of it.
In every company I’ve ever worked for - from 10 p
NOTHING!!
Under NO CIRCUMSTANCES should HR people should be asking technical questions of candidates. NEVER!!
I am a computer graphics engineer (and a very senior one)…and I’ve been involved in hundreds of hirings over the last 45 years in the graphics business…so I’m very familiar with the process from both the employer and the candidates side of it.
In every company I’ve ever worked for - from 10 person startups to 100,000 employee companies, the hiring process has been essentially this:
1. The manager who needs to hire someone puts out a list of “requirements” (which includes required qualifications, experience, essential skills) and “would-be-nice-to-have” things (stuff like very narrow skills, highly specific programming language knowledge, etc) - and states the job title (and by implication, the seniority, the salary, benefits, etc according to company norms).
2. HR use that information to post the job advert (online, and with established recruiters who specialize in this branch of technology). The job advert should contain the Manager’s two lists (“REQUIREMENTS” and “NICE TO HAVE”) and a short description of the company itself - sometimes including a brief summary of formal responsibilities of an engineer at the requested grade and (perhaps) a salary range.
3. HR people collect the incoming resume’s and check them against the manager’s lists to filter out the people who do not meet the “requirement” list and if there are a hell of a lot of applicants - maybe cull those who don’t have many of the “nice-to-have” things. If the list of applicants is very short - they may choose to relax the “requirements” list.
4. At the end of this process - HR should be able to hand the manager somewhere around a dozen or so of the resume’s of the most likely candidates.
5. The manager - and the lead/senior engineers on the project should look at this short list of resumes and schedule a group of engineers to share the work of doing 20 minute one-on-one phone interviews with each of them. This should cull out maybe half of the candidates.
6. From that process, they’ll figure out which ones are worth a face-to-face interview - and have HR invite them, set dates, etc. Some companies do two separate face-to-face interviews - one technical and the other being about general intelligence, character, work ethics, that kind of thing.
7. On the day of the interview, HR should welcome each candidate - give them standard spiel about benefits, the joys of working here, yadda, yadda - then duck out of the meeting and hand over to the manager and senior/lead engineers to ask the technical questions.
8. Ideally, you’d like a large number of the team members (not just the seniors) to at least meet the candid...
I’m assuming that a “good software developer” is someone who has at least some professional experience.
- Tell me about a time where you either failed outright or were so stuck on a problem you weren’t sure how to proceed. (If a candidate tells me they’ve never failed or have never been stuck on a technical problem the probability that they’ve worked on anything of interest is slim)
- Tomorrow the team needs to come up to speed on technology X as quickly as possible. What is your process for learning new/challenging technical material quickly? Can you give me an example of when you’ve had to do this
I’m assuming that a “good software developer” is someone who has at least some professional experience.
- Tell me about a time where you either failed outright or were so stuck on a problem you weren’t sure how to proceed. (If a candidate tells me they’ve never failed or have never been stuck on a technical problem the probability that they’ve worked on anything of interest is slim)
- Tomorrow the team needs to come up to speed on technology X as quickly as possible. What is your process for learning new/challenging technical material quickly? Can you give me an example of when you’ve had to do this?
- What is your favorite programming language? Why? (This seems like a simple question but is fraught with potholes. Do they understand that their favorite language isn’t necessarily the best language to use for problem X? Are they married to a given language/technology? Do they understand language design at all? Do they understand how manual memory management works? If not, do they understand why garbage collected environments aren’t meant to be used in all situations? Etc.)
- Understand the problem. Without understanding the problem you will often waste time going down the wrong path and making code iterations that are not meaningful. In an agile/SCRUM process this happens in grooming and it’s why the grooming and pointing steps are so important.
- Visualize your outcome. What is this thing suppose to do in the end?
- Do your test cases. You can only make valid test cases if you know 1 and 2. When you’re done you should have a set of unit/integration/behavioral tests that reflect your understanding of the problem. Test Driven Development (TDD) reflects this as a discipli
- Understand the problem. Without understanding the problem you will often waste time going down the wrong path and making code iterations that are not meaningful. In an agile/SCRUM process this happens in grooming and it’s why the grooming and pointing steps are so important.
- Visualize your outcome. What is this thing suppose to do in the end?
- Do your test cases. You can only make valid test cases if you know 1 and 2. When you’re done you should have a set of unit/integration/behavioral tests that reflect your understanding of the problem. Test Driven Development (TDD) reflects this as a discipline. While TDD seems tedious at first the reason it accomplishes tasks faster is that it helps minimize wasted time and effort. That said I’m not the strictest follower of TDD but I do acknowledge cases where it would have saved me time if I was.
Readable code is a symptom of clear thought and understanding of the problems to be solved. Conversely, unclear code reflects the unclear thought process that is still wandering around looking for a solution.
Remember that when you are coding, you are communicating with the computer and with other humans. Use meaningful names that are unambiguous. Code small units that have small numbers of elements to keep track of.
Write consistently, using the subset of whatever language you are using that gets the job done, in a consistent style.
Clear thought makes clear code.
Clear, consistent requirements a
Readable code is a symptom of clear thought and understanding of the problems to be solved. Conversely, unclear code reflects the unclear thought process that is still wandering around looking for a solution.
Remember that when you are coding, you are communicating with the computer and with other humans. Use meaningful names that are unambiguous. Code small units that have small numbers of elements to keep track of.
Write consistently, using the subset of whatever language you are using that gets the job done, in a consistent style.
Clear thought makes clear code.
Clear, consistent requirements are essential for clear code.
A good programmer wants the right things. Clarity is one of those things.
Fundamentally, the most important question is simply this: What do I want the computer to do for me?
The answer is purposefully vague and drives the asking of all other questions. E.g. I want the computer to edit pictures. Okay, how will the picture data be represented? What size pictures can be supported? Which color models? What editing tools and processes are useful? How should the user access them? etc. etc.
It's all about defining your terms. The more you know what you want, the better it will go.
The computer is a mental construct. The questions you ask of it are the questions you are reall
Fundamentally, the most important question is simply this: What do I want the computer to do for me?
The answer is purposefully vague and drives the asking of all other questions. E.g. I want the computer to edit pictures. Okay, how will the picture data be represented? What size pictures can be supported? Which color models? What editing tools and processes are useful? How should the user access them? etc. etc.
It's all about defining your terms. The more you know what you want, the better it will go.
The computer is a mental construct. The questions you ask of it are the questions you are really asking of yourself.
Generally, you have to consider what might not go as expected, and write your code to respond to each circumstance that it might encounter. How your code should respond, depends on the application. For example, banking software should probably reject transactions that have unexpected characteristics. Software for landing probes on Mars should probably try a recovery strategy. e.g. “oh ho, big rock on the landing spot, go left.”
- Make it easy for other humans to modify
- Make it robust
- Make it easy for users to do the right thing
- Make it easy to add extra users
- Make it easy to keep the service running
- Make it easy to make a profit