Προς το περιεχόμενο

Γλώσσες Προγραμματισμού 2014-2015


DreaMakos

Προτεινόμενες αναρτήσεις

Sigh...

 

Ναι, και αυτό που σίγουρα δεν θέλεις να κάνεις όταν μαθαίνεις προγραμματισμό είναι να ταιριάζεις προσεκτικά τις malloc με τις free, να προσέχεις γιατί η γλώσσα δεν πολυέχει arrays και να θυμάσαι πάντα ότι χρειάζεσαι ένα byte παραπάνω για να βάλεις null στο τέλος επειδή η γλώσσα δεν έχει strings. FFS, arrays και strings.

 

Είναι προφανές ακόμα και από τον κώδικα που βλέπουμε συνέχεια εδώ στο forum ότι σε πολλούς αρχάριους αυτή η προσέγγιση κάνει πολύ κακό γιατί μαθαίνουν να προσηλώνονται στο τελετουργικό της υπόθεσης και στο τέλος χάνουν το δάσος για το δέντρο: γράφουν σε Java και αντί για ένα super classic polymorphism αρχίζουν τα switch, γράφουν σε C++ και αντί για vector πάμε γερά malloc, γράφουν σε pretty much any language και φτιάχνουν σπαγγέτι συναρτήσεων επειδή δεν ξέρουν να χρησιμοποιήσουν ένα callback, γράφουν ακόμα και σε C και βάζουν stuff[1000] γιατί η γλώσσα κάνει το δυναμικό πίνακα τόσο δύσκολο που δεν αξίζει να ασχοληθείς. Και μετά πρέπει να ξεμάθουν τις κακές συνήθειες γιατί όλο αυτό το low high level προγραμματισμού πρακτικά δεν υπάρχει λόγος να τον εφαρμόσεις παρά σε μια μικρή μειοψηφία περιπτώσεων.

 

Το αντίθετο όμως δεν είναι πρόβλημα: μπορείς πρώτα να μάθεις να εκφράζεσαι χρησιμοποιώντας αυτές τις έννοιες και μετά να πας στη C και να σου πουν εδώ αυτά δεν περνάνε, θα πρέπει να το σκεφτείς για να το κάνεις manually. Αλλά εκεί ξέρεις ήδη τι θέλεις να κάνεις και ποιά η χρήση του και έχεις ήδη ένα υπόβαθρο. Σε οποιοδήποτε αντικείμενο μπορώ να σκεφτώ επίσης πρώτα μαθαίνει κανείς τη γενική ιδέα και πολύ αργότερα τις ανατριχιαστικές λεπτομέρειες. Υπάρχει λόγος γι' αυτό και είναι νομίζω προφανής.

 

I could go on αλλά τα έχουμε πει ήδη Ν φορές και με τη Ν + 1 δε νομίζω πως θα γίνει τίποτα. Οπότε καλές γιορτές και καλό ξεκίνημα σε όσους σκέφτονται να κάνουν τα πρώτα βήματα στον προγραμματισμό.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 280
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Όσον αφορά την εκμάθηση, η C είναι πολύ καλή για να εμβαθύνεις σε παραπρογραμματιστικές έννοιες (π.χ. pointers -- καλοί χρυσοί έχουν τις χάρες όλες, αλλά μπορείς να στήσεις ολόκληρο το facebook χωρίς να ξέρεις τι είναι pointer). Αν δεν είναι αυτός ο σκοπός σου μιλάμε για μαζοχισμό.

 

Αυτό γράψτο λίγο ξανά με 52 font size μπας και πάρει μπρος κανένας.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχει και bsearch() :lol:

 

Πέρα από την πλάκα, είναι αυτό που έγραψα εξαρχής και που πολύ εύστοχα χαρακτήρισε με μια φράση "batteries (not) included" ο DirectX.

 

Η επιλογή είναι συνειδητή, γιατί δίνει άλλου είδους πλεονεκτήματα.

 

Για μένα το μεγάλο ζόρι που πρέπει να τραβήξει κάποιος που μαθαίνει C είναι να εξοικειωθεί με structs, pointers και macros, και όχι το "batteries (not) included".

 

Κι αυτό διότι για όλα τα major sectors (π.χ. databases, graphics, networking, games, scientific, κλπ) παρέχεται τουλάχιστον μια 3rd party έτοιμη high-level βιβλιοθήκη για C (συνήθως υπάρχουν δεκάδες ανά sector).

 

Αλλά όσο high-level και να είναι μια βιβλιοθήκη, αν δεν είσαι ήδη άνετος με struct, macros και pointers, αργά ή γρήγορα θα τα βρεις παλούκια όσο προχωράς πιο βαθειά, ακόμα και με τις βιβλιοθήκες.

 

Κάτι αντίστοιχο συμβαίνει και στις "batteries included" γλώσσες, αλλά με διαφορετικά building tools. Π.χ. στη Java, όσες high-level συναρτήσεις και να έχει "included" αν δεν είσαι ήδη άνετος με τα OOP details, αργά ή γρήγορα θα τα βρεις παλούκια όσο προχωράς πιο βαθειά.

 

Το καλό με τη Java (php, c#, κλπ) είναι πως οι high-level βιβλιοθήκες είναι στανταρισμένες (ενσωματωμένες στη γλώσσα) αλλά κι εκεί δεν είναι όλα ρόδινα. Π.χ. ανά τακτά χρονικά διαστήματα, ολόκληρες βιβλιοθήκες που έχεις μάθει χαρακτηρίζονται ως depreciated, προς χάριν άλλων νεότερων.

 

Γενικώς, δεν υπάρχει νόημα στο να προσπαθούμε να βγάλουμε μια δημοφιλή γλώσσα καλύτερη ή χειρότερη από κάποια άλλη δημοφιλή γλώσσα. Υπάρχουν λόγοι που παραμένουν δημοφιλείς όσες γλώσσες παραμένουν δημοφιλείς. Έχει να κάνει με το τι θέλεις να κάνεις κάθε φορά.

Batteries not incuded το λες για το uri. Για τις δομες, δεν το λες. Οποια γλωσσα υποστηριζει arrays και τα συναφη, προβληματα σα το παραπανω (που δεν ειναι και λιγα) ειναι παιχνιδακι. Μεχρι και στη c++ που δοκιμασα, ειναι αστειο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν ειναι το uri parser... Στη c κακα τα ψεματα, οταν πας να γραψεις κατι που θελει διαχειριση δεδομενω, απλα λες "ω ρε πουστη μου". Δεν εχει τιποτα, μονο μια qsort και αυτη δουλευει μονο σε πινακες.

Ανέκαθεν η διαχείριση δεδομένων στην C γινότανε με βιβλιοθήκες τρίτων κατασκευαστών, για παράδειγμα προς το τέλος του '80 όταν η C ήταν στα φόρτε της (μετά το ρεύμα γύρισε στην C++), έπαιζαν διάφορες βιβλιοθήκες, πχ. η c-tree της Faircom ή btrieve της κάποτε κραταιάς Novell ή η b-tree της Softfocus (ISAM κλπ). Πάντα δηλαδή έψαχνες για τις μπαταρίες εκτός και αν μπορούσες (χρόνος, γνώσεις.. what ever) να γράψεις μόνος σου τον απαιτούμενο κώδικα.

 

Δεν είναι τυχαίο ότι εκείνη την περίοδο εμφανίζονται και οι γλώσσες 4 γενιάς, όπως ήταν το Clipper ή η Fox (μετέπειτα Visual Fox Pro) ή η DBase.

 

Γενικά ο κόσμος ανέκαθεν προσπαθούσε να κάνει την ζωή του ευκολότερη, σήμερα οι σύγχρονες γλώσσες τα κάνουν σχεδόν όλα (τουλάχιστον στα τετριμμένα ζητούμενα) και συμφέρουν - οπότε η ζήτηση και για εργαλεία αλά Clipper ή Fox ή DBase έχει περιοριστεί αισθητά.

 

Καλό για όλους μας αυτό λοιπόν! :)

 

ΥΓ.

Φυσικά η C είναι θαυμάσια για αυτό που σχεδιάστηκε εξ αρχής: Δηλαδή να είναι μια System Level γλώσσα προγραμματισμού (βλ. UNIX). Απλά οι φοιτητές τον καιρό εκείνο, που την γνώρισαν μέσα από το UNIX και δεδομένου ότι οι βασικές βιβλιοθήκες (και ο compiler της) ήταν και είναι λιτές μπόρεσαν να την μεταφέρουν στο σύνολο των ετερόκλητων μηχανημάτων εκείνης της εποχής(από mainframe ως 8bit home computers) αυξάνοντας θεαματικά την δημοτικότητα της και επεκτείνοντας την χρήση της για την ανάπτυξη σχεδόν οποιουδήποτε είδους λογισμικού πέραν του System Programming για το οποίο και προέκυψε.

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σιγουρα υπαρχουν βιβλιοθηκες, το θεμα ειναι να μπορεσεις να δουλεψεις με αυτες. Googlara αυτα που ειπες, αλλα δεν ειδα τιποτα, βεβαια φανταζομαι θα ειναι "OOP" σε c το interface, το οποιο δεν βοηθαει και πολυ.

 

Imo, το καλυτερο που μπορεις να κανεις ειναι να γραψεις εναν code generator για να δουλεψεις με c. Σε αλλη περιπτωση, σα γλωσσα ειναι για μικρα πραματα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σιγουρα υπαρχουν βιβλιοθηκες, το θεμα ειναι να μπορεσεις να δουλεψεις με αυτες. Googlara αυτα που ειπες, αλλα δεν ειδα τιποτα, βεβαια φανταζομαι θα ειναι "OOP" σε c το interface, το οποιο δεν βοηθαει και πολυ.

 

Imo, το καλυτερο που μπορεις να κανεις ειναι να γραψεις εναν code generator για να δουλεψεις με c. Σε αλλη περιπτωση, σα γλωσσα ειναι για μικρα πραματα.

Κοίταξε αυτά όπως σου είπα είναι εργαλεία μιας πολύ παλιάς εποχής, αλλά τον καιρό εκείνο ήταν εξαιρετικά δημοφιλείς. Εδώ και εδώ μπορεί να πάρεις πληροφορίες για αυτά. Είναι νεώτερες εκδόσεις βέβαια οπότε σήμερα φυσικά τμήματα τους είναι γραμμένα και σε C++, το '80 ήταν γραμμένα σε C, ακόμα η C++ ήταν στα σπάργανα (το boom της C++ ξεκινά για εμένα περί το '91-'92).

 

Και Code Generator είχαμε τον καιρό εκείνο, και μάλιστα υπήρξε και μια ελληνική προσπάθεια στο αντικείμενο, νομίζω λεγότανε DOMINUS για DOS αρχικά και ύστερα για Windows 3.x  -- αλλά δεν μπορώ να πω περισσότερα διότι δεν έτυχε να το δουλέψω ποτέ :-D

 

ΥΓ.

Για την ιστορία, αν θυμάμαι καλά η πρώτη έκδοση του Corel Draw (χμ..) ή του Adobe Photoshop (..) για Windows ήταν γραμμένη σε C & WinAPI οπότε και για μεγάλα πράματα είναι - απλά σήμερα δεν έχεις λόγο να τα γράψεις μαζί της - τότε ήταν μονόδρομος.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το παράδειγμα που έδωσες δεν είναι καλό. Μια χαρά βγαίνει σε 10-15 λεπτά και σε C (κι αν χρησιμοποιήσεις και έτοιμες βιβλιοθήκες τότε βγαίνει κι αυτό σε 5 λεπτά).

% cat get.py 
#!/usr/bin/python2.7
import urllib2
sock = urllib2.urlopen('http://www.google.gr')
print sock.read(250)


% ./get.py 
<!doctype html>
<html itemscope="" itemtype="http://schema.org/WebPage" lang="el">
<head>
<meta content="/images/google_favicon_128.png" itemprop="image">
<title>Google</title>
<script>(function(){window.google={kEI:'0X6hVJv8C-SnygPYjIGICw',kEXPI:'4011559
Κάτι τέτοιο πόσο εύκολα θα έβγαινε σε C ? Ακόμη χειρότερα αν μιλούσαμε για HTTPS ή αν θέλανε να κάνουμε κάτι σοβαρό με την σελίδα αντί να διαβάσουμε απλά 250 χαρακτήρες πόσο εύκολα θα γινόταν ?
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

% cat get.py 
#!/usr/bin/python2.7
import urllib2
sock = urllib2.urlopen('http://www.google.gr')
print sock.read(250)


% ./get.py 
<!doctype html>
<html itemscope="" itemtype="http://schema.org/WebPage" lang="el">
<head>
<meta content="/images/google_favicon_128.png" itemprop="image">
<title>Google</title>
<script>(function(){window.google={kEI:'0X6hVJv8C-SnygPYjIGICw',kEXPI:'4011559
Κάτι τέτοιο πόσο εύκολα θα έβγαινε σε C ? Ακόμη χειρότερα αν μιλούσαμε για HTTPS ή αν θέλανε να κάνουμε κάτι σοβαρό με την σελίδα αντί να διαβάσουμε απλά 250 χαρακτήρες πόσο εύκολα θα γινόταν ?

 

Δεν θα γινόταν εύκολα, για αυτό και έγραψα ήδη πως σε τέτοιες περιπτώσεις χρησιμοποιείς έτοιμους parsers.

 

@παπι:

 

Δεν έχω καταλάβει τι εννοείς με τις δομές. Αν π.χ. κάποιος βαριέται, δεν ξέρει, δεν προλαβαίνει, κλπ να φτιάξει μόνος του μονάχα τις ρουτίνες που του χρειάζονται για την διαχείριση ενός dynamic array, μπορεί ας πούμε να κάνει ένα:

 

#include <libds.h>

 

και να χρησιμοποιήσει απευθείας τις έτοιμες. Ομοίως και για οποιοδήποτε άλλο data-structure (ειδικά για δομές, υπάρχουν δεκάδες βιβλιοθήκες τρίτων).

 

Έπειτα όταν λες πως η C είναι για μικρά πράγματα, φαντάζομαι περιλαμβάνεις σε αυτά τα "πράγματα" ας πούμε σχεδόν ολόκληρο το gnome project, όλους τους κλάδους του system programming, το linux, το unix, το apache project, και πάει λέγοντας.

 

@defacer:

 

Σε περίπτωση που δεν το έχεις προσέξει, έχω ήδη προτείνει στον TS να ξεκινήσει με όποια γλώσσα να 'ναι, και κατά προτίμηση με python ή vb.net. Επίσης έχω ήδη γράψει καμιά 10-αριά φορές πως η C δεν είναι η πλέον κατάλληλη για αυτοδίδακτη εκμάθηση.

 

Από εκεί και πέρα, το να επιχειρείς να τρομοκρατήσεις εμμέσως είτε άμεσα όσους γουστάρουν να ξεκινήσουν με C, είναι αλλουνού παπά ευαγγέλιο. Ειδικά όταν τους υπόσχεσαι τρομερές ευκολίες, αραδιάζοντας 5 γραμμές κώδικα, χωρίς να τους προειδοποιήσεις πως για να φτάσουν στο σημείο να μπορούν να επιλέγουν ποιες και γιατί high-level συναρτήσεις θα χρησιμοποιήσουν, και πως και γιατί θα τις συνδυάσουν μεταξύ σε 5 γραμμές προϋποθέτει να έχουν φάει ψωμάκι πρώτα (πάλι καλά που δεν τους έδωσες και τίποτα overloaded methods και operators για να βγάλεις τον κώδικα σε 2 γραμμές :P).

 

Εν όλίγοις, η κάθε γλώσσα και το κάθε paradigm έχει τα συν και τα πλην του. Όσα περισσότερα ξέρει κανείς τόσο καλύτερα για αυτόν. Όποιος θεωρεί πως θα μάθει ένα paradigm (ή ακόμα χειρότερα μια γλώσσα) και θα μαμάει και θα σπέρνει όπου βρεθεί κι όπου σταθεί, πολύ απλά αργά ή γρήγορα θα προσγειωθεί πολύ ανώμαλα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

ΥΓ.

Για την ιστορία, αν θυμάμαι καλά η πρώτη έκδοση του Corel Draw (χμ..) ή του Adobe Photoshop (..) για Windows ήταν γραμμένη σε C & WinAPI οπότε και για μεγάλα πράματα είναι - απλά σήμερα δεν έχεις λόγο να τα γράψεις μαζί της - τότε ήταν μονόδρομος.

Φυσικα και δεν εννοω οτι δεν εχουν γραφτει προγραμματα σ c. Θα στο θεσω αλλιως. Εσυ ξερεις c ξερεις και c++. Αν σου πω να φτιαξεις ενα project σε δυο version, μια c και μια c++. Ποσες οι πιθανοτητες να τελειωσεις πιο γρηγορα το c version και ποσοες οι πιθανοτατες η c version να ειναι πιο γρηγορη; Προφανως καμια. Για αυτο λεω πως δεν ειναι για μεγαλα πραματα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φυσικα και δεν εννοω οτι δεν εχουν γραφτει προγραμματα σ c. Θα στο θεσω αλλιως. Εσυ ξερεις c ξερεις και c++. Αν σου πω να φτιαξεις ενα project σε δυο version, μια c και μια c++. Ποσες οι πιθανοτητες να τελειωσεις πιο γρηγορα το c version και ποσοες οι πιθανοτατες η c version να ειναι πιο γρηγορη; Προφανως καμια. Για αυτο λεω πως δεν ειναι για μεγαλα πραματα.

Από αυτή την οπτική γωνία, δεκτό :)

 

 

Μεταξύ μας, θα κοιτούσαν πάντως αν μπορώ να ξεπετάξω το project σου με C# ή Java πριν καταφύγω στην C++ ή C lol

 

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φυσικα και δεν εννοω οτι δεν εχουν γραφτει προγραμματα σ c. Θα στο θεσω αλλιως. Εσυ ξερεις c ξερεις και c++. Αν σου πω να φτιαξεις ενα project σε δυο version, μια c και μια c++. Ποσες οι πιθανοτητες να τελειωσεις πιο γρηγορα το c version και ποσοες οι πιθανοτατες η c version να ειναι πιο γρηγορη; Προφανως καμια. Για αυτο λεω πως δεν ειναι για μεγαλα πραματα.

Αν στην C++ χρησιμοποιήσεις STL τότε κατά 99.99% η c version θα είναι πολύ πιο resource efficient.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν στην C++ χρησιμοποιήσεις STL τότε κατά 99.99% η c version θα είναι πολύ πιο resource efficient.

Εγω παλι σου λεω πως η c++ version θα ειναι πιο "resource efficient" γιατι πολυ απλα, σα μοναδα δεν υπαρχει ουτε μια πιθανοτητα να εχεις το skill cap να κανεις το optimization που εχει η STL. 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

% cat get.py 
#!/usr/bin/python2.7
import urllib2
sock = urllib2.urlopen('http://www.google.gr')
print sock.read(250)


% ./get.py 
<!doctype html>
<html itemscope="" itemtype="http://schema.org/WebPage" lang="el">
<head>
<meta content="/images/google_favicon_128.png" itemprop="image">
<title>Google</title>
<script>(function(){window.google={kEI:'0X6hVJv8C-SnygPYjIGICw',kEXPI:'4011559
Κάτι τέτοιο πόσο εύκολα θα έβγαινε σε C ? Ακόμη χειρότερα αν μιλούσαμε για HTTPS ή αν θέλανε να κάνουμε κάτι σοβαρό με την σελίδα αντί να διαβάσουμε απλά 250 χαρακτήρες πόσο εύκολα θα γινόταν ?

 

Σε Windows μέσω του WinINet C API (battaries included :P) μπορείς να το γράψεις , για C πάντα, απλά - όχι τόσο απλά όσο σε Python (σε καμία περίπτωση) αλλά οπωσδήποτε πολύ απλά σε σχέση με Socket programming.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σε Windows μέσω του WinINet C API (battaries included :P) μπορείς να το γράψεις , για C πάντα, απλά - όχι τόσο απλά όσο σε Python (σε καμία περίπτωση) αλλά οπωσδήποτε πολύ απλά σε σχέση με Socket programming.

 

 

view-source:https://www.google.gr/

 

 

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Εγω παλι σου λεω πως η c++ version θα ειναι πιο "resource efficient" γιατι πολυ απλα, σα μοναδα δεν υπαρχει ουτε μια πιθανοτητα να εχεις το skill cap να κανεις το optimization που εχει η STL.

Αν στη C version χρησιμοποιήσεις generics, τότε αυτό που λες είναι πολύ πιθανό. Αν όμως χρησιμοποιήσεις μονάχα ότι ακριβώς χρειάζεσαι χωρίς generics (είτε μόνος σου είτε μέσω 3rd party), τότε πολύ απλά "άντε γεια".

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...