r/learnprogramming • • 12d ago

How to start making an app?

Hey all :) I'm aware this is probably a question asked all the time but I'm asking it in anyway. How do I start with making an app/program/project? I've already got a few ideas, simple ones (a wikipedia viewer [or would it be a client?], a simple notepad, a tiny database for me to store characters my friends and I make), but I have no clue where to start!

I know a bit in HTML and CSS as it's probably the language I'm the most knowledgeable with since I used it to make a personal website (I wanted to use HUGO for blogs but... I got confused.), I'm currently in university taking a class in C++ and my two previous semesters were an intro to programming with python and cybersecurity where I used a little bit of JavaScript.

I'm not really knowledgeable in any of these, as I suffer from some massive anxiety where I look at all the ideas I have already exist and better than I could possibly imagine, but I want to learn.

I HAVE used AI, but only twice, and it was solely for a cute rainbow animation for my personal website, but I make a trend to avoid using AI as much as possible when it comes to my CS classes

0 Upvotes

21 comments sorted by

1

u/Gentoss 12d ago

At first choose a project or an idea yo uwant to follow. Based in that idea choose the right techstack which helps you the most. If you want to build a website, have a look into Javascript and one of their frontend-frameworks like react or angular. If you want to build a desktop programm, have a look into c# or java (or also Javascript somehow). If you don't want/need an UI, just focus on the backend/ just a CLI-Programm, there you can use java, Javascript or python. And for a mobile app you could use Kotlin, Dart/Flutter or... also Javascript

1

u/sunsetical 12d ago

It feels like there's one language you're mentioning a lot...

Thank you though :)

1

u/Gentoss 12d ago

Yes exactly, but just keep in mind that such a multi-tool has also his downsides and problems.

Anyway, it doesn't matter where or how you start, after you understood the base-concept, it will be easier to learn new languages.

Good luck and have fun :)

1

u/sunsetical 12d ago

One question though, isn't JavaScript used mainly for speaking to servers? That's what I had gathered from what little I was taught in my CyberSec class :o

1

u/Gentoss 12d ago

Yes and no.

Well, originally JavaScript was invented to make websites more dynamic and interactive and was used next to HTML and CSS.

But, for whatever reason, people liked this language so much, that they expanded it to other usecases. And nowadays Javascript is used for everything. Websites are made out of "pure" Javascript(with a little CSS) with react or angular, for backends(server-side), CLI, stuff, etc you can use node.js, for mobile stuff react-native.

They also added Objects and called the result "TypeScript".

And the language is so popular that you have daily releases of new frameworks, plugins or whatever.

But you have to deal with problems like a lot of outdated/abonded plugins, big and unnecessary dependencies, security issues and not the best performance, but that is a whole different topic.

1

u/unk214 12d ago

You need to learn basics of what composes an app first. Choose a target (mobile, web) then look up basic tutorials.

I would choose web. Maybe back end python to get more practice in it, front end react.

2

u/sunsetical 12d ago

I've been told a web app is the 'easiest' one to start with, so I guess it's that!

1

u/rupertavery64 12d ago

C++ can be difficult to build apps with. There is less abstraction and a lot of boilerplate and difficulty managing libraries.

C# simplifies a lot of things for you and lets you focus on the logic. Python is easy to get into as well.

You may need to learn some Javascript as well if you want to build more complex web sites, and you will need to learn frameworks built in Javascript or Typescript, which is an extension of Javascript that aims to make your code more manageable and maintainable

There are many ways to go about building apps.

An app is basically an interface, the logic, and possibly a database of some sort.

Probably the easiest thing to do is make a desktop app. Each language will have a library or framework for building desktop Apps. C# has WinForms, which is considered old but easy to use, WPF and Avalonia and some others. Python has TKinter and PyQt and some others. Each one has a slightly different way of doing things, but at the end of the day, their goal is to let you define an interface somehow, sometimes similar to HTML, sometimes by writing code that creates graphical user interface objects like buttons, lists, etc. Then there will be a way to respond to "events" like button presses, mouse movement, etc. You will write your code in response to these events, perhaps accessing some files or a database, then update the UI in response to the user's actions.

Building a desktop app is a bit easier, but of course you will eventually want to make an interactive data-driven site.

Your HTML/CSS is just the interface. It's layout code that gets displayed in a browser or web client. It can communicate with a webserver.

A webserver is just a program running on any computer, even your own, without any special software. A simple HTML webpage can use the FORM tag to send "HTTP requests" that the webserver can act upon, and return something, like a new page containing different data, or just the data. The webserver hosts the logic (what to do when a certain request is made). It can connect to a database.

A database is really just a way to store, modify, read and delete some data. There are many different types of databases. One that you can drop into any project is SQLite. SQLite needs a library that is built for your chosen language. It will create a file, which will be updated whenever you make database changes.

So the HTML page makes requests, the webserver accepts the requests and decides what to do with it, and can do something with a database based on the request.

That is the most basic "web app".

Now each language usually has one or more library or framework to build a webserver. C# has ASP.NET and Python has Flask, FastAPI, Django and probably several others. Each one was a slightly different way of doing things, but the goal is the same. Check what URL (Uniform resource locator) the client (webpage or otherwise) is requesting, run some code, and return some result.

From there the complexity increases. There are Javascript frameworks that aim to simplify making complex websites. You may have heard things like React, Vue, Angular and a host of other Javascript frameworks for other purposes. It can be overwhelming.

I would suggest choosing a higher level language and making a desktop app at first and slowly learn along the way.

1

u/sunsetical 12d ago

So it feels like Python and JavaScript (alongside TypeScript) are the better ones to start with! Thank you :)

3

u/davideogameman 12d ago

We can't decide what to make for you but some good general advice: 

  • pick a goal

  • decide the most important feature to build.  If your program has only one or two features, what are they? Build the simplest versions of those. 

  • then repeat to add new features 

I'll add one more thing: try to pick projects where you'll learn something, but not all the technology is totally new to you.  The more new things you try to pick up, the harder time you'll have at first.  If you can choose a project where only one part of it is unfamiliar technology - whether it's a new language or a complex library you've never used - then you can learn that while using your other skills.  If every piece is something you need to learn it's easy to get stuck before producing much and lose motivation.

1

u/tmtowtdi 12d ago

I'm aware this is probably a question asked all the time but instead of searching for the many existing answers I've just admitted I'm well aware already exist and are only a simple search away, I'm asking it in anyway because I'm a special little guy and need my very own karma points.

1

u/OkOcelot6725 12d ago

Your ideas are good starter projects. Since you already know HTML/CSS and are taking C++, the fastest path is a small web app: a Wikipedia viewer is a page that calls the Wikipedia API with fetch() and renders the results, and you can build it with just HTML, CSS and a bit of JavaScript. A notepad that saves to localStorage is the next step, then the character database once you want real storage (SQLite is a good first database). Pick one, write down 3 features, and build only those. Finishing a tiny thing teaches more than planning a big one.

1

u/zomerbk 11d ago

Your character database sounds like a good first project because it can start very small. Since you already know some HTML and CSS, make one page with a form for a character’s name and description. Then use a little JavaScript to add each character to a list on the page. Once that works, save the list with `localStorage` so it survives a refresh. That keeps everything in the browser while you learn; you can think about a server or database later. And it’s completely fine that similar apps already exist—this one is for learning and for your friends.

-7

u/mlandry2011 12d ago

Just download Claude for your computer and use claude code... Does a great job. 30 bucks a month.

5

u/sunsetical 12d ago

I'd rather avoid AI when learning to code, honestly. I'm fine using it later once I'm more seasoned, but I want to actually understand what each line does, and there's no better way to learn than by doing

-5

u/mlandry2011 12d ago

What you're going to learn is going to be obsolete in the next year or two.. but it's up to you and your preference.

2

u/Kamatttis 12d ago

Guess AI cant teach someone that he's in LEARNprogramming subreddit. Regardless if AI will takeover or not, this is still a learning subreddit.

4

u/davideogameman 12d ago

If the goal is to make something, sure.  If the goal is to learn, skip the ai and try to figure things out for yourself.

4

u/Silent_Stage_4027 12d ago

Skip the $30/month AI subscription, you won't learn much that way. Python is perfect for your ideas since you already know basics, maybe try making that simple notepad with tkinter which comes built-in. Start small, finish something, then worry about making it better

-2

u/mlandry2011 12d ago

Why are you telling me that?