Showing posts with label My Views. Show all posts
Showing posts with label My Views. Show all posts

Project to test your programming skills

Project to test your programming skills

A Guessing Game - to become Full Scope/Stack Developer

If you are wondering what would be a perfect project to practice your programming skills. You are in the right place!
It's a simple number guessing game. We start with a console app and migrate to a web app with lots of features.

Steps

1. Console App:

  • Read a number N from the console between a range (MIN, MAX). Your code should then generate a random number CN between the same range(MIN, MAX) and compare if the computer-generated random number CN and the user entered number N matches.
    If it matches, the user wins. If it doesn't match, the computer wins.

2. (Optional) Desktop app:

  • Create an interface to enter the MIN/ MAX number and the user guess.
    MIN :        [ Textbox  ]
    MAX:         [ Textbox  ]
    User Guess   [ Textbox  ]
Also provide a button with label "Play" that generates the random number and displays a message in Label if the user won.
    [ Play  ]
  • Save the win/loss counts and winning/losing number in a text file 'stat.csv'. Display the average win/loss on UI when the user closes the app.
    eg:
    DATE_TIME, WINNER, WINNING_NUM, LOSING_NUM
    2020-05-10 20:01:50, USER, 5, 10
    2020-05-10 20:02:50, USER, 3, 4
    2020-05-11 20:05:50, COMPUTER, 7, 9

3. Two-player:

  • Update the GUI or Console application to allow two users to play with the computer. Both of the users can enter their guess and click Play. The user that made the correct guess will win
    GUI mockup:

    User A's Guess   [  Text Box  ]
    
    User B's Guess   [  Text Box  ]

                     [    PLAY    ]

4. (Optional) Multi-Player Game - over socket connection:

  • Update the GUI application to allow several users to play simultaneously. All the users will have a copy of the application and can join the Game by running the application on their computer. The first user to start the game can act as a Server.

5. Web Application:

  • Create a web application to play the same game in the browser. Reuse the previous code on the backend
  • Support single-player mode (play with the computer).
  • Add a sign-up page to register users. Update logic to allow only the registered/logged-in users to play. Use ReCaptcha to prevent robot making requests.
  • Block users from playing more than 1 hour. Lock them for 2 hours.
  • Multi-player: list online users and provide the ability to request/accept to play with the user. Use WebSocket to listen for updates in realtime.
  • Store the win/loss statistics into DB.
  • Generate a CSV report with stats about the winner, numbers, etc that you can download it from the web interface.

 6. Fun Stuff

  • Schedule the 'winner stat' report to run every day and deliver it to your email address.
  • Setup a background job that sends an account deactivation email if the user is not logged-in in last 20 days
  • Setup a background job to deactivate user if the user is not logged-in in the last 30 days
  • Setup a public web API to expose information about the winners
  • Use caching to read user profile from the cache instead of reading from DB on every request

7. Operation:

  • Setup a Dockerfile script to run your app in docker
  • Setup static code analysis with local SonarQube instance. You can use docker to run SonarQube. Take care of SonarQube warnings.
  • Deploy your app in a cloud environment (eg Heroku, AWS, Azure)

 Note:

  • Focus on readability, reusability throughout the development.
  • Try to make your app modular
  • Use the build system
  • Use git

 

Want to update this?

Please submit a PR at  https://github.com/GT-Corp/myths-and-facts-about-programming/blob/master/full-scope-developer.md

Myths and Facts About Programming

Myths and Facts About Programming - Stuff that I wish I knew in my early career


What's this?

A collection of common myths and facts (opinionated) about computer programming that I wish I knew in my early career.

Programming requires math

  • Neutral.
  • Only a few percentages of programmers deal with math problems in their careers.
  • Analytical skills help to break down the problem. Think of programming as understanding the problem, breaking down into smaller steps, and solving it. Similar to math right?
  • However, people who are bad at Math can be a good programmer. It also depends on the type of role and type of problem they are trying to solve.

Programming job is similar to a typist. It's all about typing code.

  • False
  • Programming(at entry level) is about:
    • reading documentation and requirements
    • documenting stuff
    • thinking how to write code
    • writing code
    • testing
    • debugging bugs
    • deploying
    • discuss with team member/management
  • The amount of time you spend typing code depends on your role and job description. There will be days you won't be typing any code.
  • Majority of programming job requires maintaining an existing system written over the years by several people. You will be required to add features, customize, fix bugs, etc

You won't require a college degree to be a programmer

Everyone can learn and be a programmer within months

Programming is really hard

  • Neutral.
  • It depends on the individual, their learning/intellectual capability, and the type of programming role they learn/get into.
  • There will be certain things you can learn easily. But a college degree will help to broaden your perspective and learn things quickly.

Programming is monotonous. Its like working in the assembly line at a factory

  • False
  • On certain days or working in the same role for a long time, you may get a feel of your job being monotonous.
  • But it's not like working in the assembly line. It requires lots of thinking and analysis.

Programming is not for girls

  • False

You need to keep reading new stuff throughout your career

  • Neutral
  • You don't "need to". But learning new stuff helps advance your career.
  • Also, it depends on the type of tool and technologies you are using. Some tools/technology (eg: JS Frameworks) get deprecated every few years. Sometimes
  • Learning a new paradigm, best practices, new architecture concepts is always useful.

Machine Learning and AI seems easy to learn.

I don't have any knowledge of statistics/probability/modeling. However, the ML/AI tutorial I found online is just 10 lines of code and it seems easy.

  • False
  • It may seem easy to use ML/AI tools created by somebody else or follow a cookbook. But you will need to understand many concepts to use those tools when solving real problems. Don't get intimidated by simple tutorials. Start by the basics and dig into the tools.

Using long variable makes program slow. So I should program like this:

int a = read()
int b = 1000
if(a > 18 && b > 50)
    println("Entry allowed")


  • False
  • With compiled languages, no. With interpreted languages, possibly but the difference would be negligible.
  • Always focus on readability. Compare the above code with the following:
int age = readMemberAge()
int balance = 1000
if(age > 18 && balance > 50)
    println("Entry allowed")

I have to learn as many programming languages eg C, Python, Java, Ruby, Kotlin, Scala, Groovy, C#, Go to be a good programmer.

  • False
  • Think of programming language as natural language eg: Nepali, French, English, Japanese, and Chinese. And the art of writing a novel or poem as the actual programming. If you mastered five languages but do not have a skill of writing a (good) poem in either of those you are still not an artist.
  • Think of programming as art. Try to be an artist in at least one language. Think of a hobby project and develop with paying attention to code quality, performance, UI, features, etc.
  • Focus on learning programming rather than learning a language.
    • Programming is a skill that you can gain with just one language. If you know how to do X in Y language then you can do it in Z language too with little effort.

HackerRank, LeetCode will guarantee me a job

  • False
  • There's no doubt that the questions on those sites help you think critically and solve a problem.
  • Its a widely used screening method to filter our candidates these days.
  • Pet project(s) and your college projects will also help you land the first job.

Google, Amazon and Facebook are using X tool. It must be good so I should learn.

  • False
  • A lot of tools developed by tech-giants are being deprecated after a couple of years.
  • Looks for a tool/language/framework that's being used by a lot of companies for a long time.

X was developed by Google, Amazon, and Facebook so it must be good. I should learn and use it.

  • False
  • There's no guarantee that those tools MUST be good. Don't fall for advertisements
  • Review 100 job descriptions on Linkedin/Indeed etc and find yourself what's popular on the market

I must learn Angular, React, Vue and XYZ web framework to master my web development skills

  • False
  • It's better to start the web development without the frameworks so that you understand how those frameworks are solving the problems of not using those frameworks
  • You don't need to learn all of these, one would be enough. If you started learning web development without using frameworks, switching between frameworks would be easier.

I know X1 framework/library/tool. But the job vacancy says mentions X2(the alternative of X1). I should not apply for this job.

  • False
  • Test yourself if you know X1 framework/library/tool how long you will take to learn X2.
  • As long as you know the abstract concepts and have worked on at least one pet/professional project on your own there's a high chance that you can learn another framework/library/tool quickly. They all are trying to solve a similar project but slightly different ways.
  • Also look for 'preferred' vs 'required' skills on job vacancies.

Everyone on social media hates language/framework X. X must be bad.

  • False
  • Don't fall for people's 'opinions'. People think languages/frameworks/tools as religion. They hate each other.
  • The best way to find out what to learn is to look at job vacancies. At least a hundred of them.

Language X does that in one line. So, it is the best language.

  • Neutral
 DB.allRecords().read().toCsv("file.csv");
  • It's nice that they provided that functionality in one line out of the box. But there is a great deal of code hidden behind the scene.
  • All languages support creating library modules to extend the feature. Some languages are by nature too abstract/low level and it requires developers to write libraries around it to make things simpler.
  • So, that doesn't mean language X is best.

Want to add more Q/A and correct sth?

Please submit a Pull Request at https://github.com/GT-Corp/myths-and-facts-about-programming/blob/master/README.md


Job Interview Question Answer Frequently Asked - programmer


Some Common and most asked job interview question ( for programmer) and their answers. In Nepali Context.

These questions are the most common questions ( in my job haunt experience) that will be asked to you in your interview.

1. Tell me about yourself:
After finishing computer engineering from ABC campus last year, i worked as java developer. I have good command of Java related technologies. I also have interest in ABC. I find myself as a hard worker and quick learner. And I think i am a good candidate for the position.

2. Last Jobs:
My first job was at ABC as N months contract. Our responsibilites were bug fixing and upgrading an existing ABC system. It was a web app. I mainly worked in feature enhancement like : ABC and some business modules like report generations.
After finishing the contract, i joined ABC as java developer. There too i worked  in a business application for healthcare related dataprocessing/reporting application . I mainly write code for ABC , ABC etc.

3. Why did you leave your last job?
In fact it was a good time working for ABC but i couldnot find any learning opportunity there, I always wanted a challanging job where i can contribute myself and learn something. I worked there for N months and decided to quit the job.

What did you did in this free time :
After i quit the job - besides job haunting, i did a freelancing project- it was ABC,..,
Meanwhile, i learned android framework and teach java in an institute for about 1 month.


6. How do you know about this position?
I knew about this org from the job vacancy notice posted in ABC.com.

7. What do you know about this organization?
ABC is a 10 year old software company located in ABC. it mainly works on ABC. Its major clients are ABC. Major products are ABC.

11. What kind of salary do you need?
As i have few experience and skills, and this might be somehow different job from my previous ... ummm...well ... NN000 NRS/Mo will be fine.

13. How long would you expect to work for us if hired?
I would work as long as you and i both enjoy working me in ABC. I am certain that, I will enjoy the job at ABC##??

25. What are you looking for in a job?
Where i can contribute more and learn new things in the process . not only technically but also the detail of business domain on which i am working at.

50. Do you have any questions for me?
Well ... yes i think i  have one.

>> what will be the next possible step in selection process.
>> what type of responsibilities
>>

tips - learn programming faster and effectively

How to learn programming effectively- tips for developing programming skills


Tip1 : Have detail knowledge of following and practice them in your favorite programming language
  • Design Patterns / Anti Patterns
  • UML
  • OOAD

Career suggestion for nepali computer engineers programmers student

Career Suggestions/guidelines to Computer Engineering BE, BCA, BTech, BSc-CS, BIT students 
  • Self Study
  • Internet is your library - Search, search and search more
  • Try to understand the concept of programming not language
  • Algorithms and Data Structures are everything
  • Do you know Design Patterns ?
  • Projects are portfolio for your first job interview

teacher student - problems nepali collages university

Problems with teacher and student in Nepali collages/universities

Teacher
  •     Theory focus
  •     No senior lecturers available (almost all of them left country for higher education)
  •     Weak at practical implementation of the course
  •     Teach to earn mindset
  •     Can teach anything.. any subject to any faculty (ridiculous)
  •     Knows everything in theory
  •     Lack of subject domain expertise

Student
  •     Theory Focus
  •     Lack of seriousness in course study
  •     Lack of knowledge about scope of course
  •     Lack of practical application of theory
  •     Takes projects as burden
  •     Exam centric study
  •     No interest in self learning
  •     Stressed of unnecessary subjects (irrelevant ones)
  •     No idea of Collaborative Development
  •     No Interest in professional latest happenings

    This list reflects those who do a irresponsible teaching and the students who loose their interest in study in the middle of the course. Writing these as an outsider – there came these points needed to be managed during college life. These scenario needs to be changed. We need to inherit the sharing, caring and collaborating culture from the history of world’s technical developments.

Nepali Computer Engineer Programmer Career Options in Nepal

Career options for Nepali Computer Engineer/ Programmer

Most of the Computer Engineering graduate are working in one of the following positions in Kathmandu. 
  • Programmer (Software Engineer) ~ 85 %
    • Desktop Applications Developer
    • Web Applications Developer
    • Mobile Applications Developer
  • Network Admin ~5 %
  • Sys Admin
  • DBA (Database Administrator)
  • Web/UI Designer
  • Q/A  (Quality Assurance)
  • 3D Animator / Modeler
  • System/Project Management
  • Information Architecture (System Designer)
We are being taught C/C++ for basic programming/ software development concepts but professionally “PHP, Javascript, JAVA, C#, Python” are of the popular programming languages used in Nepal. Recently, mobile application development for iPhone and Android phones (Objective-C and Android frameworks) are also being popular among Nepali developers

most Guaranteed job forever - programming

Is Programming Guaranteed Employment Forever?


That summary line is deliberately hyperbolic, but I firmly believe there’s almost no better skill to acquire than computer programming. It’s impossible to predict the job market decades from now—thirty years ago you might have argued the world would always need typewriter repairers—yet computers and software are undeniably here for the long haul. Becoming an expert in how they work is a solid foundation, and even if “programming” evolves into something different, it will remain an invaluable stepping stone.



Today, programming jobs exist in virtually every city in the developed world. If you’re a skilled developer who interviews well, you can likely land a role in any city you choose, at almost any company. That said, it’s far easier to spot a weak programmer in an interview than a weak lawyer or accountant—so if you’re not yet a strong programmer or struggle with interviews, those opportunities may be harder to access.

Hopefully I’ve made it clear that programming is one of the best career choices you can make—short of becoming a lawyer, doctor, or oil baron. Still, the most important thing is that you genuinely enjoy the work. Learn to program because it fascinates you. I’ve known developers who entered the field purely for the money; they end up as mediocre programmers and, worse, they hate their jobs. Do what you love, even if it means a modest income. Really.

So now your question is “how.” That’s a tougher one. You can learn in many ways. Start by picking pretty much any programming language. Once you’ve learned to think like a programmer, you’re 90% of the way there. Java, C, Python—choose whatever appeals to you. The best advice I can give: think of a very, very small program (like tic–tac–toe) and then go write it, from scratch. You can switch languages later; Java is a decent starting point, but you have plenty of choices.

One of the first things you’ll notice about the programming community is that when multiple options are roughly equivalent, fierce camps emerge. “Which language should I learn first?” is a classic example—some people will insist you must start by writing programs on paper in a made-up language.

Seek out help and read tutorials actively. If you’re in school, take programming classes; if you’re out of school, it’s harder but not impossible. Beware of books that promise “Learn Everything About Being a Java Programmer in 7 Days and Also Get Certified.” Some are good, but most are shallow. Instead, spend time browsing the computer section of your local bookstore or library—thumb through anything that looks interesting. The more ideas you’re exposed to, the better.

I can’t overemphasize the importance of play. Write little 5‑ to 10‑line programs just to see what happens. Tweak them, break them, add a feature. Grab small example programs and experiment.

Programming friends are invaluable. Find someone who’s a decent programmer and don’t hesitate to ask them questions when you’re stuck or confused. Online communities like Askville (or today’s Stack Overflow) are perfect for specific, focused questions.

# Sites to ask programming QA